2018年4月28日训练日记

  周五带伤回来的第一次比赛其实感觉并不好,全场就用java在划水了,都是队友给说的思路,除了自己出了一个水题,全场都在伤口炸裂的痛苦之中。总之学了java还是有用的,但是这场比赛的效果其实并不怎么好,虽然出了七道题,但又两三道都是听到别的队讨论我们也就往那个方向想才出来的。

  但是周六换了中文题之后立马不一样了,各种高效率的配合,g题窑子没做出来,讲了一遍题意之后,一会我就1a了,然后最近看的二分也起到了大的作用,f题明显一眼就看出来是个二分了,虽然正解好像不是二分,但是确实是一个经典的二分题目,然后就是e题和世东打了个配合,我出思路,他出代码,然后b题又和窑子打了个配合,这个题目其实不简单,一开始我们想的是矩阵快速幂,然后我们分开推了矩阵,我是正向找加了多少,他是逆向找减少了多少,最终都推出了合理的矩阵, 然后发现矩阵快速幂不能解决问题,首先结构体内开不了怎么大的数组,其次,复杂度明显不够用,但是样例明显可以过。然后窑子在他的矩阵里发现了规律,是一个杨辉三角,又是一顿配合,逆元加组合数打表,最后出了这个题。最后k题思路对了,可能再多给一会就出来了,总之这场比赛还是比较舒服的一次,比其他队多两到三道题。老纪用set很六,他那个东西我也打算学学,值的修改真的做不到那么天马行空,虽然他每次都得现查资料,我一次学会他就行了,这里拓下老纪的代码。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#include <sstream>
#define inf 8000000000000
#define ll long long
#define mod 1000000007
using namespace std;
ll nian[100010], v[100010];
set< pair<ll,ll> > st;
vector<pair<ll,ll> > G[100010];
void init()
{
     for ( int i=0;i<100010;i++)
     {
         G[i].clear();
         nian[i]=v[i]=0;
     }
}
int main()
{
     int t;
     cin>>t;
     while (t--)
     {
         int n,m,i;
         cin>>n>>m;
         init();
         st.clear();
         for (i=0;i<m;i++)
         {
             ll x,y,z;
             cin>>x>>y>>z;
             G[x].push_back(pair<ll,ll>(y,z));
             G[y].push_back(pair<ll,ll>(x,z));
             nian[x]+=z;
             nian[y]+=z;
         }
         for (i=1;i<=n;i++)
             st.insert(pair<ll, ll>(nian[i], i));
         ll ans=0;
         while (!st.empty())
         {
             set< pair<ll,ll> >::iterator it=st.begin();
             pair<ll,ll> now=*it;
             st.erase(it);
             ans=max(ans,now.first);
             ll x=now.second;
             v[x]=1;
             for (i=0;i<G[x].size();i++)
             {
                 pair<ll,ll> food=G[x][i];
                 if (v[food.first])
                     continue ;
                 ll u=food.first;
                 it=st.lower_bound(pair<ll,ll>(nian[u],u));
                 st.erase(it);
                 nian[u]-=food.second;
                 st.insert(pair<ll,ll>(nian[u],u));
             }
         }
         cout<<ans<<endl;
     }
}
  这个应该是f题正解的思路,贪心,当时是想到了,但是不会更新就没这样写,我什么时候才能怎么优秀的使用这个玩意,虽然大一学c++的时候感觉这都是常规操作啊。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值