周五带伤回来的第一次比赛其实感觉并不好,全场就用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;
}
}