/*
二分图染色版本
两个监狱对应二部图的两部分
在给定的怨气值里二分
对于每一个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. 解决Maven中Missing artifact javax.jms:jms:jar:1.1:compile

    搭建好项目后报错: Missing artifact javax.jms:jms:jar:1.1:compile  于POM.xml中 解决方案: 一 :在nexus中配置一个代理仓库     地址为 ...

  2. iscc2016-basic-find-to-me

    额 第一题就暴力搜索了 已知仿射加密变换为c=(11m+8)mod26,试对密文sjoyuxzr解密 #include <stdio.h> int main(void) { int m,c ...

  3. Primary key and Unique index

    SQL> create table t1(id1 char(2),id2 char(2),id3 char(2)); Table created. SQL> desc t1 Name Nu ...

  4. 构造函数语义学之Copy Constructor构建操作(1)

    一.Copy Constructor的构建操作 就像 default constructor 一样,如果class没有申明一个 copy constructor,就会隐含的声明或隐含的定义一个.生成的 ...

  5. Linux下常见权限操作相关命令

    ls -alls -ld chmod 700 sys_config chmod 700 sys_objschmod 4711 objget su test_setuid -c "./objp ...

  6. 【模拟】Codeforces 691B s-palindrome

    题目链接: http://codeforces.com/problemset/problem/691/B 题目大意: 求一个字符串是不是镜像的(不是回文).是输出TAK否则RE. 题目思路: [模拟] ...

  7. Delphi NativeXml用法攻略 转

    NativeXml可以在官网上下载,下载后将文件夹放在指定地方,打开DELPHI在其环境变量中引用NativeXml路径,然后在程序中引用NativeXml单元,我们就可以使用NativeXml了. ...

  8. android网络图片的下载

    android网络图片的下载 /** * Get image from newwork * * @param path * The path of image * @return byte[] * @ ...

  9. 【26】Remove Duplicates from Sorted Array

    [26]Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...

  10. BagTest

    package cn.aust.zyw.demo; import java.util.Iterator; /** * Created by zyw on 2016/2/17. */ public cl ...