[NOIP2010]关押罪犯
2016-01-07 11:00
381 查看
题目描述 Description
S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。
每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到S 城Z 市长那里。公务繁忙的Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。
在详细考察了N 名罪犯间的矛盾关系后,警察局长觉得压力巨大。他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。那么,应如何分配罪犯,才能使Z 市长看到的那个冲突事件的影响力最小?这个最小值是少?
输入描述 Input Description
第一行为两个正整数N 和M,分别表示罪犯的数目以及存在仇恨的罪犯对数。接下来的M 行每行为三个正整数aj,bj,cj,表示aj 号和bj 号罪犯之间存在仇恨,其怨气值为cj。数据保证,且每对罪犯组合只出现一次。
输出描述 Output Description
共1 行,为Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出0。
样例输入 Sample Input
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
样例输出 Sample Output
3512
数据范围及提示 Data Size & Hint
罪犯之间的怨气值如下面左图所示,右图所示为罪犯的分配方法,市长看到的冲突事件影响力是3512(由2 号和3 号罪犯引发)。其他任何分法都不会比这个分法更优。
【数据范围】
对于30%的数据有N≤ 15。
对于70%的数据有N≤ 2000,M≤ 50000。
对于100%的数据有N≤ 20000,M≤ 100000。
【法一】并查集
【法二】二分答案+染色
S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。
每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到S 城Z 市长那里。公务繁忙的Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。
在详细考察了N 名罪犯间的矛盾关系后,警察局长觉得压力巨大。他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。那么,应如何分配罪犯,才能使Z 市长看到的那个冲突事件的影响力最小?这个最小值是少?
输入描述 Input Description
第一行为两个正整数N 和M,分别表示罪犯的数目以及存在仇恨的罪犯对数。接下来的M 行每行为三个正整数aj,bj,cj,表示aj 号和bj 号罪犯之间存在仇恨,其怨气值为cj。数据保证,且每对罪犯组合只出现一次。
输出描述 Output Description
共1 行,为Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出0。
样例输入 Sample Input
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
样例输出 Sample Output
3512
数据范围及提示 Data Size & Hint
罪犯之间的怨气值如下面左图所示,右图所示为罪犯的分配方法,市长看到的冲突事件影响力是3512(由2 号和3 号罪犯引发)。其他任何分法都不会比这个分法更优。
【数据范围】
对于30%的数据有N≤ 15。
对于70%的数据有N≤ 2000,M≤ 50000。
对于100%的数据有N≤ 20000,M≤ 100000。
【法一】并查集
[code]{ 作者:CWW970329 2014并查集 题目:p1069 关押罪犯 } program cx; var i,n,m,h1,h2:longint; ok:boolean; ax,ay,aw,home:array[0..1000000]of longint; function find(x:longint):longint; begin if home[x]=x then exit(x); home[x]:=find(home[x]); exit(home[x]); end; procedure swap(var x,y:longint); var t:longint; begin if x=y then exit; x:=x xor y; y:=x xor y; x:=x xor y; //t:=x; x:=y; y:=t; end; procedure sort(l,r: longint); var i,j,x,y: longint; begin i:=l; j:=r; x:=aw[(l+r)>>1]; repeat while aw[i]<x do inc(i); while x<aw[j] do dec(j); if not(i>j) then begin swap(aw[i],aw[j]); swap(ax[i],ax[j]); swap(ay[i],ay[j]); inc(i); j:=j-1; end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; begin read(n,m); for i:=1 to m do read(ax[i],ay[i],aw[i]); sort(1,m); for i:=1 to n<<1 do home[i]:=i; ok:=false; for i:=m downto 1 do begin h1:=find(ax[i]); h2:=find(ay[i]); if h1=h2 then begin ok:=true; break end; home[h1]:=find(ay[i]+n); home[h2]:=find(ax[i]+n); end; if ok then writeln(aw[i]) else writeln(0); end.
【法二】二分答案+染色
[code]{ 作者:CWW970329 题目:p1069 关押罪犯 } program cx; uses math; var i,n,m,x,y,z,l,r,mid,cnt:longint; head,next,e,w,co:array[0..1000000]of longint; ok:boolean; function dfs(x:longint):boolean; var t:longint; begin t:=head[x]; while t>0 do begin if w[t]>mid then begin if co[e[t]]=co[x] then exit(false); if co[e[t]]=0 then begin co[e[t]]:=-co[x]; if not dfs(e[t]) then exit(false); end; end; t:=next[t]; end; exit(true); end; procedure link(x,y,z:longint); begin inc(cnt); e[cnt]:=y; w[cnt]:=z; next[cnt]:=head[x]; head[x]:=cnt; end; begin read(n,m); for i:=1 to m do begin read(x,y,z); link(x,y,z); link(y,x,z); r:=max(r,z); end; while l<r do begin if l=r then break; mid:=(l+r) >> 1 ; ok:=true; fillchar(co,sizeof(co),0); for i:=1 to n do if co[i]=0 then begin co[i]:=1; if not dfs(i) then begin ok:=false; break end; end; if ok then r:=mid else l:=mid+1; end; writeln(l); end.
相关文章推荐
- YTU 1020: I think it
- java-常用工具命令
- css定位在屏幕固定位置
- linux没有那个文件或目录
- 教程网站收集
- Object-C 切换到 Swift 全程直播
- Linux系统下使用uname命令显示系统和硬件信息
- 点击事件的执行过程
- Java停止线程
- ResultMessage<T>
- 2016注定是不平凡的一年
- 线性表的正向迭代器实现
- 经典递归问题
- 文本挖掘的概述
- 我的MYSQL学习心得(四) 数据类型
- 160多个android开源代码汇总
- 用Python实现古诗词填字游戏(三)
- .NET Reflector v9.0.1.318(包含注册机)
- DVWA系列之24 high级别上传漏洞
- DVWA系列之24 high级别上传漏洞