[NOIp2010提高组]关押罪犯
2017-06-11 18:43
204 查看
OJ题号:洛谷1525
思路:贪心。
先将所有的人按怨气值从大到小排一下,然后依次尝试将双方分入两个不同的监狱,如果失败(即已分入相同的监狱),则输出这个怨气值。
#include<cstdio> #include<algorithm> #include<functional> struct Edge { int u,v,w; bool operator >(const Edge &x) const { return this->w>x.w; } }; const int N=20001; class UnionFindSet { private: int anc[N<<1]; int Find(int x) { return (x==anc[x])?x:(anc[x]=Find(anc[x])); } public: UnionFindSet(const int n) { for(int i=1;i<=n<<1;i++) anc[i]=i; } bool isConnected(const int x,const int y) { return Find(x)==Find(y); } void Union(const int x,const int y) { anc[Find(x)]=Find(y); } }; int main() { int n,m; scanf("%d%d",&n,&m); Edge e[m]; for(int i=0;i<m;i++) { scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); } std::sort(&e[0],&e[m],std::greater<Edge>()); UnionFindSet s(n); for(int i=0;i<m;i++) { if(s.isConnected(e[i].u,e[i].v)) { printf("%d\n",e[i].w); return 0; } s.Union(e[i].u,e[i].v+n); s.Union(e[i].v,e[i].u+n); } puts("0"); return 0; }
相关文章推荐
- NOIP2010提高组 关押罪犯
- NOIP2010 提高组 复赛 prison 关押罪犯
- 【图-二分图染色】NOIP2010提高组关押罪犯
- NOIP提高组2010 关押罪犯
- [codevs 1069 关押罪犯] [NOIP2010提高T3]
- NOIP2010提高组] CODEVS 1069 关押罪犯(并查集)
- TYVJ1403(NOIP2010提高组T3)关押罪犯
- NOIP 提高组 2010 关押罪犯
- NOIP 2010 - 提高组 关押罪犯 二分答案+二分图的判定
- 【NOIP 2010 提高组 T3】关押罪犯(并查集)
- noip提高组 2010 关押罪犯 (洛谷1525)
- NOIP2010提高组复赛 解题报告(C/C++)(机械翻译)(乌龟棋)(关押罪犯)(引水入城)
- 【NOIP2010提高组】关押罪犯
- NOIP2010提高组 关押罪犯 -SilverN
- 【NOIP2010提高组】关押罪犯
- NOIP2010提高组 关押罪犯(并查集)
- [NOIP2010] 提高组 洛谷P1525 关押罪犯
- NOIP2010提高组 关押罪犯
- 【NOIP2010提高组】关押罪犯
- 【noip2010提高组】 关押罪犯 并查集+贪心