1 solutions

  • 0
    @ 2025-3-3 16:21:28

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    
    struct node{
    	int x,y,z;//x和y的怨气值为z 
    }a[200000]; 
    
    int n,m,f[20100];//f:存储关系 
    int t[20100];//标记每个人的敌人 
    
    //查:查询元素的根 
    int find(int x){
    	return f[x]==x?x:f[x]=find(f[x]);
    } 
    
    //并:合并元素xy
    void merge(int x,int y){
    	int fx = find(x);
    	int fy = find(y);
    	if(fx != fy){
    		f[fx] = fy;
    	}
    } 
    
    //重写cmp:按照怨气值降序排序 
    bool cmp(node n1,node n2){
    	return n1.z > n2.z;
    } 
    
    int main() {
    	cin>>n>>m;
    	int i;
    	for(i = 1;i <= n;i++) f[i] = i;//并查集初始化
    	//读入m个关系
    	for(i = 1;i <= m;i++){
    		cin>>a[i].x>>a[i].y>>a[i].z; 
    	} 
    	
    	//按怨气值降序 
    	sort(a+1,a+1+m,cmp);
    	
    	//判断m个关系	
    	for(i = 1;i <= m;i++){
    		//如果两个罪犯在一个集合中,说明这就是最大的怨气值 
    		if(find(a[i].x) == find(a[i].y)){
    			cout<<a[i].z;
    			return 0;
    		}else{
    			//t数组标记每个人的敌人
    			//如果这个人还没有敌人,则标记出这个人的敌人 
    			//有敌人,则合并 
    			if(t[a[i].x]==0) t[a[i].x] = a[i].y;
    			else merge(t[a[i].x],a[i].y);
    			
    			if(t[a[i].y]==0) t[a[i].y] = a[i].x;
    			else merge(t[a[i].y],a[i].x); 
    		}
    	} 
    	
    	cout<<0;
    	return 0;
    }
    
    • 1

    Information

    ID
    9972
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By