关押罪犯
题目链接:https://ac.nowcoder.com/acm/problem/16591
思路
见此题的视频讲解:https://www.bilibili.com/video/BV1nz411b75c
代码
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <vector>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define PI acos(-1)
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll maxn = 1e6+10;
double eps = 1e-8;
int N,M;
struct node{
int a,b,c;
bool operator < (const node& o) const{
return c>o.c;
}
}arr[maxn];
int fa[maxn];
int find(int x){
return fa[x] == x?x:fa[x] = find(fa[x]);
}
void join(int x,int y){
int fx = find(x),fy = find(y);
if(fx != fy) fa[fx] = fy;
}
int main(){
ios;
cin>>N>>M;
for(int i = 1;i<=2*N;i++) fa[i] = i;
for(int i = 1;i<=M;i++){
int a,b,c;cin>>a>>b>>c;
arr[i] = {a,b,c};
}
sort(arr+1,arr+M+1);
for(int i = 1;i<=M;i++){
int a,b,c;
a = arr[i].a,b = arr[i].b,c=arr[i].c;
if(find(a) == find(b)){
cout<<c<<endl;
return 0;
}else{
join(a,b+N);
join(a+N,b);
}
}
cout<<0<<endl;
return 0;
}
京公网安备 11010502036488号