1 solutions
-
0
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