/*
二分图染色版本
两个监狱对应二部图的两部分
在给定的怨气值里二分
对于每一个Ci 进行染色判断是否合法
染色的时候 如果这条边的ci > Ci 这两个人就带分开 即染成不同的颜色
如果染色到某两个点颜色相同且怨气值>Ci 这个Ci就不合法
二分直到最后答案
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
using namespace std;
int n,m,num,head[maxn],Ci,ans,color[maxn];
struct node
{
int v,t,pre;
}e[maxn*];
struct nope
{
int x,y,z;
}p[maxn];
int cmp(const nope &a,const nope &b)
{
return a.z<b.z;
}
void Add(int from,int to,int dis)
{
num++;
e[num].t=dis;
e[num].v=to;
e[num].pre=head[from];
head[from]=num;
}
bool Color(int s)
{
for(int i=head[s];i;i=e[i].pre)
if(e[i].t>Ci)
{
if(color[s]==color[e[i].v])return ;
if(color[e[i].v]==)
{
color[e[i].v]=-color[s];
if(!Color(e[i].v))return ;
}
}
return ;
}
bool pd()
{
for(int i=;i<=n;i++)
if(color[i]==)
{
color[i]=;
if(!Color(i))return ;
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
int u,v,t;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&t);
p[i].x=u;p[i].y=v;p[i].z=t;
Add(u,v,t);Add(v,u,t);
}
sort(p+,p++m,cmp);
int l=,r=m;
while(l<=r)
{
memset(color,,sizeof(color));
int mid=(l+r)/;
Ci=p[mid].z;
if(pd())
{
r=mid-;
ans=Ci;
}
else l=mid+;
}
printf("%d\n",ans);
return ;
}

 
/*
并茶几版本
因为就有两个监狱 两个人要么一个监狱 要么不一个监狱(废话- - )
为了使ans最小 我们一定会让ci大的组合先分开
所以按ci排一遍序 然后for每一对
如果发现他俩在一个集合 输出ci结束
否则的话 我们希望的是把他两个分开
即把他们分别跟对方的仇人合并
所以我们假设每个人的仇人都是i+n
对于i 如果另外两个人都合并到了i+n 说明两个人一定在一所监狱
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxx 40010
#define maxn 200010
using namespace std;
int fa[maxx],n,m;
struct node
{
int a;
int b;
int c;
}s[maxn];
int cmp(const node &x,const node &y)
{
return x.c>y.c;
}
int find(int x)
{
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
int i,j;
cin>>n>>m;
for(i=;i<=n*;i++)fa[i]=i;
for(i=;i<=m;i++)
cin>>s[i].a>>s[i].b>>s[i].c;
sort(s+,s++m,cmp);
for(i=;i<=m;i++)
{
int r1=find(s[i].a);
int r2=find(s[i].b);
if(r1==r2)
{
cout<<s[i].c;
return ;
}
fa[r1]=find(s[i].b+n);
fa[r2]=find(s[i].a+n);
}
cout<<;
return ;
}

noip 2010 关押罪犯 (二分图染色 并茶几)的更多相关文章

  1. noip 2010 关押罪犯 二分答案+二分图染色 || 并查集

    题目链接 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值&q ...

  2. NOIP 2010 关押罪犯 并查集 二分+二分图染色

    题目描述: S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值" ...

  3. NOIP 2010 关押罪犯

    P1525 关押罪犯 题目描述 SS 城现有两座监狱,一共关押着 NN 名罪犯,编号分别为 1-N1−N .他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突. ...

  4. [NOIP 2010] 关押罪犯 (二分+二分图判定 || 并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  5. noip提高组 2010 关押罪犯 (洛谷1525)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  6. NOIP提高组2010 关押罪犯

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  7. 题解【luoguP1525 NOIp提高组2010 关押罪犯】

    题目链接 题解 算法: 一个经典的并查集 但是需要用一点贪心的思想 做法: 先将给的冲突们按冲突值从大到小进行排序(这很显然) 然后一个一个的遍历它们 如果发现其中的一个冲突里的两个人在同一个集合里, ...

  8. Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组

    1069 关押罪犯 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description S 城现有两座监狱,一共 ...

  9. 洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]

    P1525 关押罪犯 513通过 1.4K提交 题目提供者该用户不存在 标签图论并查集NOIp提高组2010 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 咳咳.竟MLE了. 囧.运行时错误 ...

随机推荐

  1. DOS命令行使用pscp实现远程文件和文件夹传输(转)

    转自 http://snailwarrior.blog.51cto.com/680306/141201   pscp是putty安装包所带的远程文件传输工具,使用和Linux下scp命令相似,具体的使 ...

  2. Github Https方式push错误”Empty reply from server”

                  1 2 3 4 5 6 7 8 9 10 2014-11-19 20:41:30.130 GitHub for Mac Login[2595:326257] AskPass ...

  3. java枚举小结

    如何定义一个枚举类? //定义了4个等级 enum Level{ A,B,C,D } 枚举类的实质: class Level{ public static final Level A = new Le ...

  4. js singleton

    方案一:利用闭包的两个作用,可以变通地读到内部的变量. 方案二: 是可以让这些变量始终在内存中. 方案一 var SingletonTester = (function () { //单例方法 fun ...

  5. 【Java】Java Servlet 技术简介

    Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...

  6. CentOS 5升级Python版本(2.4>2.7)

    安装SALT时,需要这样作,公司有一批REDHAT5的,弄起来... 然后却是: Missing Dependency: python(abi) = 2.6 is needed by package ...

  7. yii分页

    关于分页有一个重要的类CPagination. CPagination represents information relevant to pagination. http://www.yiifra ...

  8. Squares(哈希)

    Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 14328   Accepted: 5393 Description A sq ...

  9. UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]

    题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...

  10. 数学(矩阵乘法,随机化算法):POJ 3318 Matrix Multiplication

    Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17783   Accepted: ...