博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【codevs1069】关押罪犯
阅读量:4881 次
发布时间:2019-06-11

本文共 1457 字,大约阅读时间需要 4 分钟。

第一次做二分图染色qwq,用了一个下午qwq,看电脑看的我眼睛难受

这个题满足二分的性质,因此二分图+二分……

#include
#include
#include
#include
#include
#include
using namespace std;struct in{ int to,ne,co;}ter[200020]; queue
qwq;bool flag;int n,m,t,x,l,r,y,z,tail,head[200020],col[20005],a[100005];inline void build(int f,int l,int c){ ter[++tail]=(in){l,head[f],c},head[f]=tail; ter[++tail]=(in){f,head[l],c},head[l]=tail;}inline void bfs(int xx,int qi){ if(!flag)//如果之前发现当前答案不能满足则直接返回 return; while(!qwq.empty()) qwq.pop(); qwq.push(qi); col[qi]=1; while(!qwq.empty()) { int qaq=qwq.front(); for(int i=head[qaq];i;i=ter[i].ne) { if(ter[i].co<=xx)//如果说这对犯人的怒气值小于当前答案,则说明他们可以被接受 continue; if(col[ter[i].to]>0)//如果现在找到的点之前被走过 { if(col[ter[i].to]==col[qaq])//且颜色与现在的队首颜色相同 { flag=0;return;//当前答案不成立,返回 } } else//否则染色 col[ter[i].to]=3-col[qaq],qwq.push(ter[i].to); } qwq.pop(); }}inline bool ask(int xia){ int biao=a[xia]; memset(col,-1,sizeof(col)); flag=1; for(int i=1;i<=n;i++) if(col[i]<0)//如果这个点没有走过 bfs(biao,i); return flag;}int main(){ scanf("%d%d",&n,&m); memset(head,-1,sizeof(head)); for(int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&z),build(x,y,z),a[i+1]=z; a[1]=0; sort(a+1,a+2+m);//先排个序,便于下面二分 l=1,r=m+1;//l,r是数组下标 while(l
>1; if(ask(mid))//如果返回值为真,则说明现在的答案太大,可以进一步缩小 r=mid; else//否则说明答案太小 l=mid+1; } printf("%d",a[l]);}

 

转载于:https://www.cnblogs.com/Loi-dfkdsmbd/articles/7700541.html

你可能感兴趣的文章
squid
查看>>
系统开发管理、架构与设计步步谈随笔索引
查看>>
Java的时间空间复杂度详解
查看>>
有效防止SQL注入漏洞
查看>>
Linux chown命令
查看>>
十、I/O流——4-输入、输出流体系
查看>>
十二、网络编程——4-基于UDP协议的网络编程
查看>>
异常处理与调试6 - 零基础入门学习Delphi55(完)
查看>>
if语句三种形式
查看>>
正则表达式之字符串验证
查看>>
codeblocks如何支持_tmain?可移植代码的编码推荐
查看>>
省市联动 填坑
查看>>
canvas写的一个小时钟demo
查看>>
原来今天是冬至
查看>>
又混了一天班
查看>>
九度oj 1006
查看>>
HDU6400-2018ACM暑假多校联合训练1004-Parentheses Matrix-构造
查看>>
最短路问题专题
查看>>
《Redis复制与可扩展集群搭建》看后感
查看>>
Jquery Mobile总结
查看>>