TYVJ的编译器总是要搞点岔子出来,上次是double必须用f输出而不能用lf,这次又不知道为何CE

于是去了洛谷P1525测试,AC

题目描述

S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。

每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到S 城Z 市长那里。公务繁忙的Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。

在详细考察了N 名罪犯间的矛盾关系后,警察局长觉得压力巨大。他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。

那么,应如何分配罪犯,才能使Z 市长看到的那个冲突事件的影响力最小?这个最小值是多少?

输入输出格式

输入格式:

输入文件的每行中两个数之间用一个空格隔开。第一行为两个正整数N 和M,分别表示罪犯的数目以及存在仇恨的罪犯对数。接下来的M 行每行为三个正整数aj,bj,cj,表示aj 号和bj 号罪犯之间存在仇恨,其怨气值为cj。数据保证1<aj=<=bj<=N ,0 < cj≤ 1,000,000,000,且每对罪犯组合只出现一次。


输出格式:

共1 行,为Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出0。

输入输出样例

输入样例#1:

4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
输出样例#1:

3512

说明

【输入输出样例说明】罪犯之间的怨气值如下面左图所示,右图所示为罪犯的分配方法,市长看到的冲突事件影响力是3512(由2 号和3 号罪犯引发)。其他任何分法都不会比这个分法更优。

【数据范围】对于30%的数据有N≤ 15。对于70%的数据有N≤ 2000,M≤ 50000。对于100%的数据有N≤ 20000,M≤ 100000。

1、并查集解法

  简单又快捷,详见之前写过的题解,链接:

  http://www.cnblogs.com/SilverNebula/p/5557982.html

2、二分+二分图染色

  并不简单也并不快捷,用来练习分治算法。

  先根据罪犯间的关系建好图。

  二分在所有边权值中查找答案,每次在图中对边权大于当前所尝试答案的边进行染色,如果都染色成功,说明当前答案可行,则继续寻找更小的答案;如果染色不成功,说明当前答案不正确,则继续尝试更大的答案。

 #include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int mxm=;
const int mxn=;
int cnt=;
int uplimit=;
int n,m;
int color[mxn];
int mid;
vector<int>eg[mxn];
vector<int>w[mxn];
struct edge{
int x,y;
int d;
}e[mxm];
int cmp(const edge a,const edge b){
return a.d>b.d;
}
void build(){//建图
for(int i=;i<=m;i++){
eg[e[i].x].push_back(e[i].y);
w[e[i].x].push_back(e[i].d);
eg[e[i].y].push_back(e[i].x);
w[e[i].y].push_back(e[i].d);
}
return;
}
bool dfs(int x,int fa){//dfs判断二分情况
if(color[x]==color[fa] && color[x]!=-)return ;//矛盾
if(color[x]==!color[fa])return ;//可行
color[x]= !color[fa];
for(int i=;i<eg[x].size();i++){
int v=eg[x][i];
if(v!=fa && w[x][i]>e[mid].d)
if(!dfs(v,x))return ;
}
return ;
}
int main(){
scanf("%d%d",&n,&m);
int i,j;
int u,v,d;
for(i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&d);
e[++cnt].x=u;e[cnt].y=v;e[cnt].d=d;
}
sort(e+,e+m+,cmp);//边权从大到小排序
build();//建图
int l,r;
l=;r=m;//在所有边中二分查找
int ans=;
while(l<=r){
bool flag=;
memset(color,-,sizeof(color));//重置染色状态
color[]=;
mid=(l+r)>>;
for(i=;i<=n;i++){
if(color[i]==-)
if(dfs(i,)==false){
flag=;//不成立
break;
}
}
if(flag)r=mid-;
else{
ans=e[mid].d;//保存答案
l=mid+;//更新边界
}
}
if(m==)ans=;
printf("%d\n",ans);
return ;
}

TYVJ P1403 [NOIP2010]关押罪犯的更多相关文章

  1. 【洛谷P1525】[NOIP2010]关押罪犯

    关押罪犯 题目链接 思路: 二分图或并查集 这里讲并查集算法: 1.将每对罪犯的冲突关系按影响从大到小排序 2.将集合与(i+n)合并表示编号为i的罪犯不能在该集合内 3.依次从大到小处理冲突关系: ...

  2. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

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

  3. noip2010 关押罪犯 (vijos1776)

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

  4. NOIP2010关押罪犯

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

  5. NOIp2010 关押罪犯

    二分+2-SAT 先预处理出所有的v,然后离散化一下,在那个的基础上二分,对于每次二分出的值约束边权超过所二分出的边权的两点. //OJ 1322 //by Cydiater //2015.8.26 ...

  6. NOIP2010 关押罪犯 (并查集)

    若x,y有关系 将x与y的补集, y与x的补集建立关系 ; maxm=; ..maxm,..] of longint; f:..maxn*] of longint; i,j,m,n,x,y,z:lon ...

  7. [noip2010]关押罪犯 并查集

    第一次看的时候想到了并查集,但是不知道怎么实现: 标解,f[i]表示i所属的集合,用f[i+n]表示i所属集合的补集,实现的很巧妙,可以当成一个使用并查集的巧妙应用: #include<iost ...

  8. NOIP2010关押罪犯 二分+二染色

    这个题一上来 没有思路,后来想没有思路就二分吧 那么我们来二分 首先,大于当前的mid值的关系,不能出现在一个集合里 (即关系形成的图是一个二分图,判定二分图可以二染色) 如果不能形成二分图,那么说明 ...

  9. tyvj P1403 关押罪犯 题解

    P1403 [NOIP2010]关押罪犯 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述    S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他 ...

随机推荐

  1. swift为UIView添加extension扩展frame

    添加swift file:UIView+Extension import UIKit extension UIView { // x var x : CGFloat { get { return fr ...

  2. onresize方法

    resize()方法可以写在当前页面包含的所有js里

  3. MVC权限验证之ActionFilterAttribute

    参考:http://www.cnblogs.com/waitingfor/archive/2011/12/27/2303784.html ActionFilterAttribute是Action过滤类 ...

  4. fenghuangscannerV3 EXE版本

    作者wils0n未给出EXE版本,鼓捣了下: 1.安装pyinstaller 2.fenghuangscanner目录防止pyinstaller下 3. pyinstaller.py --consol ...

  5. [转]World Wind学习总结一

    WW的纹理,DEM数据,及LOD模型 以earth为例 1. 地形数据: 默认浏览器纹理数据存放在/Cache/Earth/Images/NASA Landsat Imagery/NLT Landsa ...

  6. 广州传智博客黑马训练营.Net15期

    广州传智博客黑马训练营.Net15期 7 张扬波 MVC大项目 6 张扬波 MVC 3 胡凌浩 HTML&JS 2 基础加强+三层 5 张扬波 企业站点(asp.net)&EF 4 江 ...

  7. css 兼容

    color:#0000FF\9; ;/*ie6,ie7,ie8*/ *color:#FFFF00;/*ie7*/ _color:#FF0000;/*ie6*/ body:nth-of-type(1) ...

  8. Java 环境下使用 AES 加密的特殊问题处理

    在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 ...

  9. [CareerCup] 7.2 Ants on Polygon 多边形上的蚂蚁

    7.2 There are three ants on different vertices of a triangle. What is the probability of collision ( ...

  10. 20145215实验三 敏捷开发与XP实践

    20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...