再次求助
查看原帖
再次求助
717599
dengjunhaodejia09楼主2023/1/9 21:52
#include <bits/stdc++.h>
using namespace std;
inline int read(){
    int x=0,f=1,ch=getchar();
    for(;!isdigit(ch);ch=getchar()) f=(ch=='-')?-1:1;
    for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
    return x*f;
}
int head[100001],cnt;
struct node{
    int to,nxt;
}e[100010];
bool f[100010];
void add(int x,int y){
    cnt++;
    e[cnt].to=y;
    e[cnt].nxt=head[x];
    head[x]=cnt;
}
int n,m;
queue <int> q;
int a[100010];
int bfs(){
    for(int i=1;i<=n;i++){
        if(f[i]==false){
            q.push(i);
            f[i]=true;
            a[i]=1;
            while(!q.empty()){
                int o=q.front();
                f[o]=true;
                q.pop();
                for(int j=head[o];j!=0;j=e[j].nxt){
                    if(a[e[j].to]!=0){
                        if(a[e[j].to]==a[o]){
                            return 0;
                        }
                    }else{
                        if(a[o]==1){
                            a[e[j].to]=2;
                            q.push(e[j].to);
                        }else{
                            a[e[j].to]=1;
                            q.push(e[j].to);
                        }
                    }
                }
            }
        }
    }
    return 1;
}
struct edge{
    int x,y,z;
}b[1000001];
int cmp(edge g,edge r){
    return g.z>r.z;
}
int main(){
    n=read();
    m=read();
    for(int i=1;i<=m;i++){      
        b[i].x=read();
        b[i].y=read();
        b[i].z=read();  
    }
    sort(b+1,b+m+1,cmp);
    int l=1,r=m,mid=0,ans=-1;
    while(l<=r){
        mid=(l+r)/2;
        memset(a,0,sizeof(a));
        memset(f,false,sizeof(f));
        memset(head,0,sizeof(head));
        for(int i=1;i<=cnt;i++){
            e[i].to=0;
            e[i].nxt=0;
        }
        cnt=0;
        for(int i=1;i<=mid;i++){
            add(b[i].x,b[i].y);
            add(b[i].y,b[i].x);
        }
        if(bfs()==1){
            ans=mid;
            l=mid+1;
        }else{
            r=mid-1;    
        }
    }
    if(ans==m){
        cout<<0;
    }else{
        cout<<b[ans+1].z;
    }       
    return 0;
}
2023/1/9 21:52
加载中...