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

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 钻石 Diamond

题目描述 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。

分类标签 Tags

二分法 并查集 树结构 大陆地区 NOIP全国联赛提高组 2010年

  1. /*
  2. 带权并查集.
  3. 贪心策略+并查集维护.
  4. 并查集维护两个人是不是敌人.
  5. 当扫到两个人x,y时.
  6. 维护father[find(x+n)]=find(y).
  7. 把y的朋友归为自己的敌人.
  8. x维护同理.
  9. */
  10. #include<cstdio>
  11. #include<algorithm>
  12. #define MAXN 100001
  13. using namespace std;
  14. int father[MAXN],n,m;
  15. struct data{int x,y,z;}s[MAXN];
  16. int read()
  17. {
  18. int x=0,f=1;char ch=getchar();
  19. while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
  20. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  21. return x*f;
  22. }
  23. bool cmp(const data &x,const data &y)
  24. {
  25. return x.z>y.z;
  26. }
  27. int find(int x)
  28. {
  29. return x!=father[x]?father[x]=find(father[x]):x;
  30. }
  31. int main()
  32. {
  33. n=read(),m=read();
  34. for(int i=1;i<=2*n;i++) father[i]=i;
  35. for(int i=1;i<=m;i++)
  36. s[i].x=read(),s[i].y=read(),s[i].z=read();
  37. sort(s+1,s+m+1,cmp);
  38. for(int i=1;i<=m;i++)
  39. {
  40. int l1=find(s[i].x),l2=find(s[i].y);
  41. if(l1==l2)
  42. {
  43. printf("%d",s[i].z);return 0;
  44. }
  45. father[find(s[i].x+n)]=l2,father[find(s[i].y+n)]=l1;
  46. }
  47. printf("0");
  48. return 0;
  49. }
  1. /*
  2. 二分+二部图染色.
  3. 把两个监狱看成两个集合.
  4. 那么这就成了一个二部图相关的问题.
  5. 我们认为有仇恨关系的不能在一个集合里.
  6. 但是我们可能不能完全避免矛盾.
  7. 我们把不同颜色作为集合的flag.
  8. 那么有仇恨关系的不能在一个集合里.
  9. 我们二分一个仇恨值,单调性显然.
  10. 我们把大于仇恨值的罪犯染色.
  11. 看能不能染出整张图.
  12. */
  13. #include<cstdio>
  14. #include<algorithm>
  15. #include<vector>
  16. #include<cstring>
  17. #define MAXN 100001
  18. using namespace std;
  19. int father[MAXN],n,m,s[MAXN],max1,mid,head[MAXN],tot,ans;
  20. int b[MAXN];
  21. struct data{int v,next,x;}e[MAXN*2];
  22. int read()
  23. {
  24. int x=0,f=1;char ch=getchar();
  25. while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
  26. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  27. return x*f;
  28. }
  29. void add(int u,int v,int z)
  30. {
  31. e[++tot].v=v;
  32. e[tot].x=z;
  33. e[tot].next=head[u];
  34. head[u]=tot;
  35. }
  36. bool dfs(int u)
  37. {
  38. for(int i=head[u];i;i=e[i].next)
  39. {
  40. int v=e[i].v;
  41. if(e[i].x>mid)
  42. {
  43. if(b[u]==b[v]) return false;
  44. if(!b[v])
  45. {
  46. b[v]=3-b[u];
  47. if(!dfs(v)) return false;
  48. }
  49. }
  50. }
  51. return true;
  52. }
  53. bool check(int x)
  54. {
  55. for(int i=1;i<=n;i++)
  56. {
  57. if(!b[i])
  58. {
  59. b[i]=1;
  60. if(!dfs(i)) return false;
  61. }
  62. }
  63. return true;
  64. }
  65. void erfen(int ll,int rr)
  66. {
  67. while(ll<=rr)
  68. {
  69. memset(b,0,sizeof(b));
  70. mid=(ll+rr)>>1;
  71. if(check(mid)) ans=mid,rr=mid-1;
  72. else ll=mid+1;
  73. }
  74. }
  75. int main()
  76. {
  77. int x,y,z;
  78. n=read(),m=read();
  79. for(int i=1;i<=m;i++)
  80. {
  81. x=read(),y=read(),z=read();
  82. max1=max(max1,z);add(x,y,z);add(y,x,z);
  83. }
  84. erfen(0,max1);
  85. printf("%d",ans);
  86. return 0;
  87. }

Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组的更多相关文章

  1. Codevs 1066 引水入城 2010年NOIP全国联赛提高组

    1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...

  2. 1068 乌龟棋 2010年NOIP全国联赛提高组

    1068 乌龟棋 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descrip ...

  3. 引水入城 2010年NOIP全国联赛提高组(bfs+贪心)

    1066 引水入城 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在一个遥远 ...

  4. Codevs 3286 火柴排队 2013年NOIP全国联赛提高组 树状数组,逆序对

    题目:http://codevs.cn/problem/3286/ 3286 火柴排队  2013年NOIP全国联赛提高组  时间限制: 1 s   空间限制: 128000 KB   题目等级 : ...

  5. Codevs 1218 疫情控制 2012年NOIP全国联赛提高组

    1218 疫情控制 2012年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description H 国有 n 个城市,这 ...

  6. Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组

    3731 寻找道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找 ...

  7. Codevs 1217 借教室 2012年NOIP全国联赛提高组

    1217 借教室 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在大学期间,经常需要租借教 ...

  8. Codevs 1198 国王游戏 2012年NOIP全国联赛提高组

    1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...

  9. Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)

    3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...

随机推荐

  1. SqlLite ---.net连接数据库

    初识SqlLite ---.net连接数据库   SqlLite以小巧和嵌入式闻名,以前只是听说,现在终于忍不住要尝试下. 先下载ADO.NET2.0 Provider for SQLite,下载完后 ...

  2. Asp.net中使用资源文件实现网站多语言

    首先需要新建一个ASP.NET Web Application.然后右键项目文件Add->Add ASP.NET Folder->App-GlobalResources. 新建好资源文件夹 ...

  3. iOS 有关自动轮播图片

    //初始化当前视图 _currentImageView = [[UIImageView alloc] init]; [_currentImageView setImageWithURL:[NSURL ...

  4. There is no Action mapped for namespace [/pages/action/student] and action name [findStudent]

    1.错误描写叙述 2014-7-13 2:38:54 org.apache.jasper.compiler.TldLocationsCache tldScanJar 信息: At least one ...

  5. 你真的会用 SDWebImage?

    SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITableViewCell上有 ...

  6. 定位CoreLocation

    一.定位 iOS三种定位方式: CoreLocation 按定位的准确性: GPS(Global Positioning System全球定位系统); 蜂窝式基站; wifi; 定位顺序:1. 首选G ...

  7. Android之HTTP网络通信--GET传递(二)

    根据上一篇写的是实现了通过url接口将接口中的数据显示出来,这次根据上一篇的基础,进一步说明一下AsynTask的使用. AsynTask类有几个函数是大家必须知道的. doInBackGround( ...

  8. Android_listView

    package com.example.app5; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...

  9. mysql:错误日志log_error:

    1.启动错误日志: 在不同的情况下,错误日志会记录在不同的位置,如果没有配置文件指定文件名,则默认为hostname.err 在mysql5.6的RPM发布的方式中,错误日志被放在/var/log/m ...

  10. 关于gnome

    关于GNOME GNOME(发音为英语发音:/ɡəˈnoʊm/[4]),即GNU网络对象模型环境(英语:The GNU Network Object Model Environment),GNU计划的 ...