题目传送门

感想:相信自己的想法!继续挖掘!

读完题目后:看到的最大值最小?二分答案啊!再仔细一看:wi达到了1e9,二分可能费点劲。(其实真的是可以的)而且check函数貌似并没有什么行之有效的写法。继续往下想。

再读读,想到我们肯定尽量不想让有仇恨的犯人关在一起,所以每次就把有仇的敌人用并查集并在一起(其实想法是挺好的,到这一步出现了偏差)。

结果...然后就没有结果了!

唉其实应该自己再多想想的嘛...还是去看了@Chemist和@new2zy两位巨佬的题解。主要有两种方法。

法一:二分图+二分答案

这题很好的满足了二分图的性质。是不错的二分图例题。

给出二分图定义:若无向图的n个节点可分为A,B两个非空集合,且A,B的交集为空集,且同一集合内的点没有边相连,称这种图为二分图。

二分图判定定理:一张无向图是二分图,当且仅当它不存在奇环。

代码实现:染色法。用黑白来标记图中两种节点,用大法师(Dfs)或绑发饰(Bfs)实现,遍历每条边如果没被访问,就染相反的颜色,否则判断它已染的色是否不合法。(根据定义,一个节点被标记后,它所有的相邻节点颜色应与他不同)。

get了这个知识,我们可以与最初的想法二分答案结合,本题中一个合法解需满足存在二分图的情况,而最优解可以通过二分实现。那么判断是否为二分图就成为了check函数的内核。

Code

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue> using namespace std; int n,m,tot,l,r;
int head[],vis[];
struct node{
int to,next,val;
}edge[]; void add(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].val=z;
edge[tot].next=head[x];
head[x]=tot;
} bool check(int w)
{
memset(vis,,sizeof(vis));
queue<int>q;
for(int k=;k<=n;k++)
if(!vis[k])
{
q.push(k);vis[k]=;
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=head[x];i;i=edge[i].next)
if(edge[i].val>=w)
{
int y=edge[i].to;
if(!vis[y]) vis[y]=-vis[x],q.push(y);
else if(vis[y]==vis[x]) return false;
}
}
}
return true;
} int main()
{
scanf("%d%d",&n,&m);
// l=1;
for(int i=;i<=m;i++)
{
int a=,b=,c=;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
r=max(r,c);
}//r++;
while(l<r)
{
int mid=(l+r+)>>;
if(check(mid)) r=mid-;
else l=mid;
}
printf("%d",l);
return ;
}

*代码细节注意:入队地点(没被访问过),二分细节。

法二:冰茶几+略微贪心思想

由于Chemist大神已经讲的十分清楚,我就少发表些拙见。(扔下地址跑)

我们当然可以贪心地把仇恨值从大到小排序,先使仇恨值大的几对罪犯分到两个监狱,再秉承《团伙》一题中“敌人的敌人就是朋友”的观念,如果实在分不开了,当前的就是答案。

现在这么优质的一题多解的noip题已经很难找了。好题!好题!

NOIp 2010/Luogu P1525 关押罪犯 【二分图/并查集】 By cellur925的更多相关文章

  1. 洛谷P1525 关押罪犯(并查集、二分图判定)

    本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...

  2. P1525 关押罪犯[扩展域并查集]

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

  3. Luogu P1525 关押罪犯

    传送门 首先 这是一个并查集= = 这道题其实明白了还挺简单的qwq 思路: 因为只看仇恨值最大的一对儿,所以把他们从大到小排序,越大的就尽量分开,直到不能再分为止qwq q[x]表示x最大的敌人(x ...

  4. codevs1069关押罪犯(并查集)

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

  5. 洛谷1525 关押罪犯NOIP2010 并查集

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

  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. AcWing 257. 关押罪犯 (并查集)打卡

    题目:https://www.acwing.com/problem/content/description/259/ 题意:有两个监狱,监狱里面有很多犯人,现在有很多对冲突,还有个冲突值,现在问我们怎 ...

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

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

  9. 洛谷 P1525 关押罪犯

    题目链接 https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪 ...

随机推荐

  1. 权限对于目录和文件的具体含义 linux

    权限对于具体文件的含义 文件上存储具体数据的地方,包括一般文件,数据库文件,二进制可执行文件等.因此权限对于文件的意义上这样都 r: 可读权限,表示可以读取该文件的内容 w:可写权限,表示可以编辑,新 ...

  2. MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化

    一.mongoose介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具. Mongoose 是 NodeJS 的驱动, 不能作为其他语言的驱动. M ...

  3. 【APUE】fork函数

    #include <unisth.h> pid_t fork(void) fork函数被调用一次,返回两次.子进程的返回值是0,父进程的返回值是子进程的进程id. fork函数调用一次却返 ...

  4. 最新---java多线程下载文件

    import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...

  5. Office EXCEL 如何设置最大行高

    对于单个单元格行来说,行高必须在0-409之间   但是如果合并了两个单元格,则行高就扩展了一倍,不止409,而是两倍的409.

  6. APache POI emaple ()

    Business Plan The BusinessPlan application creates a sample business plan with three phases, weekly ...

  7. 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密

    读取本地json文件,转出为指定格式json   引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件StreamReader sr = ...

  8. 找中位数O(n)算法

    题目描写叙述: 给定一个未排序的整数数组,找到当中位数. 中位数是排序后数组的中间值,假设数组的个数是偶数个.则返回排序后数组的第N/2个数. 例子 给出数组[4, 5, 1, 2, 3], 返回 3 ...

  9. 使用python生成c文件模板

    目标 完成一个python脚本,实现指定名字后,自动生成.c和.h的模板.例如: /** * @file epc.c * @author 陈维 * @version V01 * @date 2017. ...

  10. HLJU 1220: AC100天 (枚举)

    1220: AC100天 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 89  Solved: 12 [id=1220">Submit ...