rt
来都来了帮帮蒟蒻吧!
WA,30pts,二分图+二分答案求调
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+3;
int cnt,head[N];
struct Edge{
int to,val,nxt;
}e[N+33];
int col[N];
void add(int u,int v, int w){
e[++cnt].to = v;
e[cnt].val = w;
e[cnt].nxt = head[u];
head[u] = cnt;
}
//int as,bs;
bool dfs(int x,int c,int lim){
// c== 1?as++:bs++;
col[x] = c;
bool flag = 1;
for(int i = head[x];i;i = e[i].nxt)if(e[i].val > lim){
int v = e[i].to;
if(!col[v]) {
flag = flag && dfs(v,3-c,lim);
}
if(col[v] == c){ flag = false;}
}
return flag;
}
signed main(){
int n,m;
cin>>n>>m;
for(int i = 1; i<=m; i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
int l = 0, r = 2e9,ans = 0;
while (l<=r){
int mid = (l+r)/2;
memset(col,0,sizeof col);
// as = 0,bs= 0;
if(dfs(1,1,mid)){
ans = mid;
r=mid - 1;
}
else l = mid + 1;
}
cout<<ans;
return 0;
}