[NOIP2010] 关押罪犯

题意:

传送门

题解:

贪心+并查集

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define N 200010
using namespace std;

int fa[N<<1];

struct Node {
  int x,y,z;
  bool operator < (const Node &a) const {
    return z>a.z;
  }
}e[N];

int gi() {
  int x=0,o=1; char ch=getchar();
  while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();
  if(ch=='-') o=-1,ch=getchar();
  while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
  return o*x;
}

int find(int x) {
  return x==fa[x]?x:fa[x]=find(fa[x]);
}

int main() {
  int n=gi(),m=gi();
  for(int i=1; i<=(n<<1); i++) fa[i]=i;
  for(int i=1; i<=m; i++) {
    int x=gi(),y=gi(),z=gi();
    e[i]=(Node){x,y,z};
  }
  sort(e+1,e+m+1);
  for(int i=1; i<=m; i++) {
    int x=e[i].x,y=e[i].y,xx,yy;
    xx=find(x+n),yy=find(y+n);
    x=find(x),y=find(y);
    if(x==y || xx==yy) {
      printf("%d", e[i].z);
      return 0;
    }
    fa[xx]=y,fa[yy]=x;
  }
  puts("0");
  return 0;
}
posted @ 2017-10-13 09:32  HLX_Y  阅读(120)  评论(0)    收藏  举报