【JZOJ6231】【20190625】等你哈苏德
题目
有\(m\)条线段,每条线段为\([l_i,r_i]\),每条线段可以是黑/白色
有些线段已经被染色,有些需要被确定颜色
询问是否存在一种染色方案,使得对于每一个位置\(i\),覆盖它的线段黑白个数差的绝对值不超过1
\(1 \le m \le 10^5 , n \le 10^9\)
题解
将每条线段变成\([l_i-0.5,r_i+0.5]\)
对于一个合法的方案可以加一些线段使得黑白覆盖的个数相等
对\(l_i\)向\(r_i\)连一条边,如果把染色看成定向
合法的方案满足在相邻两个点的中间划分,正向割边数=反向隔边数
这相当于求一个欧拉回路(暂时不会证)
离散化,连边后找到度数为奇数的点补成偶数
注意由于一段的-1+1可能是交替的,所以只能对相邻的点补边
接着用网络流做混合图的欧拉回路
#include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; const int N=60010; int n,m,cnt,tot,o,S,T,d[N],val[N],cur[N],dis[N],hd[N],id[N],sub[N],tt; map<int,int>mp; map<int,int>::iterator it; struct edge{int u,v,w;}e[N]; struct Edge{int v,nt,f;}E[N<<2]; int get(int x){int&t=mp[x];if(t)return t;val[t=++cnt]=x;return t; }void adde(int u,int v,int w){E[o]=(Edge){v,hd[u],w};hd[u]=o++;E[o]=(Edge){u,hd[v],0};hd[v]=o++; }bool bfs(){static int head,tail,q[N],vis[N];for(int i=S;i<=T;++i)vis[i]=0,dis[i]=0;head=tail=0;vis[q[++tail]=S]=1;while(head<tail){int u=q[++head];for(int i=hd[u];~i;i=E[i].nt)if(E[i].f&&!vis[E[i].v]){int v=E[i].v;dis[v]=dis[u]+1;vis[v]=1;q[++tail]=v;if(v==T)return true;}}return false; }int dfs(int u,int F){if(u==T||!F)return F;int flow=0,f;for(int i=cur[u];~i;i=E[i].nt){int v=E[cur[u]=i].v;if(dis[v]==dis[u]+1 && (f=dfs(v,min(E[i].f,F)))){flow+=f,F-=f;E[i].f-=f,E[i^1].f+=f;if(!F)break;}}if(!flow)dis[u]=0;return flow; }int dinic(){int flow=0;while(bfs()){for(int i=S;i<=T;++i)cur[i]=hd[i];flow+=dfs(S,inf);}return flow; }int main(){freopen("wait.in","r",stdin);freopen("wait.out","w",stdout);scanf("%d%d",&m,&n);for(int i=1,u,v,w;i<=m;++i){scanf("%d%d%d",&u,&v,&w);v++;sub[++tt]=u;sub[++tt]=v;u=get(u),v=get(v);id[i]=-1;if(w==1)d[v]++,d[u]--;else d[u]++,d[v]--;e[++tot]=(edge){u,v,w};}sort(sub+1,sub+tt+1);for(int i=1;i<=tt;i+=2){if(sub[i]==sub[i+1])continue;int u=get(sub[i]),v=get(sub[i+1]);d[u]++,d[v]--;e[++tot]=(edge){u,v,-1};id[tot]=-1;}/*int lst=0,now=0;for(it=mp.begin();it!=mp.end();++it){int i=(*it).second;if(!(d[i]&1))continue;if(!lst){lst=i;continue;}else now=i;d[lst]++,d[now]--;e[++tot]=(edge){lst,now,-1};id[tot]=-1;lst=0;}*/S=0;T=cnt+1;for(int i=S;i<=T;++i)hd[i]=-1;//cout<<S<<" "<<T<<endl;int sum=0;for(int i=1;i<=cnt;++i)if(d[i]>0)adde(S,i,d[i]/2),sum+=d[i]/2;else adde(i,T,-d[i]/2);for(int i=1;i<=tot;++i)if(!~e[i].w){e[i].w=0;id[i]=o;adde(e[i].u,e[i].v,1);}////cout<<o<<endl;if(dinic()!=sum){puts("-1");return 0;}for(int i=1;i<=tot;++i)if(~id[i]&&!E[id[i]].f)e[i].w^=1;/*{for(int i=1;i<=tot;++i)printf("%d %d %d\n",e[i].u,e[i].v,e[i].w);}*/for(int i=1;i<=m;++i)printf("%d ",e[i].w);return 0; }
转载于:https://www.cnblogs.com/Paul-Guderian/p/11094221.html
【JZOJ6231】【20190625】等你哈苏德相关推荐
- 【2019暑假集训】06.25比赛总结
今天试了一下省选组,成功自闭 考场思路 contest(https://jzoj.net/senior/#contest/home/2783) T1(梦批糼):数不包含障碍点的三维长方体.计算答案概率 ...
- 年轻人的第一台哈苏徕卡?和老牌相机合作的3C厂商到底得到了什么
哈苏.徕卡,即使对摄像一无所知的人,恐怕也会认识这些品牌.这些名词意味着相机这款产品,以及光学成像技术的历史沿革和技术高度.它们是被老法师挂在嘴边的信仰,在普通人眼里,它们也代表着高端.专业甚至奢侈. ...
- 学习动力之“学习金字塔 (爱德加•戴尔)”理论
一.什么是学习金字塔? 学习金字塔是美国缅因州的国家训练实验室研究成果,它用数字形式形象显示了:采用不同的学习方式,学习者在两周以后还能记住内容(平均学习保持率)的多少.它是一种现代学习方式的理论.最 ...
- 铜陵新松工业机器人项目_投资10亿元,茶山德威工业机器人和精密模具项目动工...
来源:东莞时间网-i东莞 12月12日,德威工业机器人和精密模具项目在茶山镇正式破土动工.该项目是茶山镇的省.市重大项目,投资10亿人民币,将建设成企业总部,年产值预计达20亿人民币,将进一步优化茶山 ...
- 2.4g 无线键鼠对码软件_富德iK8900无线键鼠套装评测:静音纤薄
作为世界三大无线键鼠品牌之一的富德科技,自2008年成立以来就专注于无线键鼠领域.凭借扎实的品质.出色的做工以及时尚潮流的外观设计,获得了众多年轻消费者的青睐.更与时下较为流行的动漫IP合作,推出联名 ...
- 提示以演示模式运行_德事隆和IMSAR在小型无人机上集成并演示合成孔径雷达
[据德事隆系统公司网站2019年2月18日公告]德事隆系统公司(德事隆)与IMSAR公司于2019年2月18日宣布,在德事隆系统公司的Aerosonde小型无人机上成功集成并演示了IMSAR公司的NS ...
- 微软CEO纳德拉对话沈向洋:那些未来可期的计算机视觉研究与应用
编者按:6月16日,CVPR 2020 大会以全球连线的形式如期开幕.在大会的首场主题演讲中,微软公司 CEO 萨提亚·纳德拉与微软公司前执行副总裁沈向洋进行了一场精彩的炉边对谈,分享了对计算机视觉. ...
- 轮椅度过一生!微软CEO纳德拉26岁长子去世,半生为儿也难逃病魔
视学算法报道 编辑:桃子 拉燕 [新智元导读]周一,微软CEO纳德拉长子Zain Nadella去世,享年26岁.作为微软CEO,纳德拉是一个伟大的商业领导者,更是一名合格的父亲. 2月28日 ...
- 马斯克蝉联美国CEO薪酬榜No.1,年入41亿,库克皮猜纳德拉加起来都没他高
郭一璞 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 硅谷钢铁侠.星链缔造者.特斯拉血汗工厂资本家.新造车势力的噩梦.中国人民的好朋友.煎饼果子爱好者,一龙·马斯克,现在又有了一个新的t ...
最新文章
- 最常见的 35 个 Python 面试题及答案
- Java 地位不保,落后已成定局 ?| 10月编程语言排行
- JDK8新特性之Stream流
- 如何解决tmux中Anaconda虚拟环境下的python版本不正确的问题
- 在VNC远程桌面环境Xfce4中Tab键失效的解决方法
- IntelliJ IDEA for Mac 如何取消双击shift键打开全局搜索弹窗
- python数据包头_Python爬虫-请求响应包头
- 决定要放下的人,要不要好好道个别?
- Web前端开发需要掌握的技能有哪些?
- win10计算机管理字体糊,大神分析win10系统高分屏字体模糊的办法介绍
- 一般线性模型和混合线性模型_从零开始的线性混合模型
- vivado ERROR: [Synth 8-4556] size of variable is too large to handle
- 薅羊毛算副业吗?薅羊毛到底是怎么赚钱的?
- 如何做好虾皮跨境电商?关于Shopee店铺快速开单的真相!
- 前端重要信息手机号、邮箱、身份证号进行脱敏处理
- 屁股决定脑袋--是否可以把0603电容更换为0402的电容
- 回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出
- [导入]【07欧美爆笑青春性喜剧】《魅力学堂_青男涩女》【DVD中字】【15:00】
- 人人开源renren-fast-vue
- 小程序毕设作品之微信企业公司小程序毕业设计(7)中期检查报告
热门文章
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
- 介绍两个Eclipse插件: Implementors Call Hierarchy
- 【转】C++面试题(四)——智能指针的原理和实现
- 科技公司高管职位知多少?(转)
- RAC环境下的备份与恢复(四)
- MVC之Model转Json
- 3星|《财经》年刊:各行业专家学者的现状分析与短期预测
- 关于Unity3D中鼠标移动指定物体的解决方案
- 探索 ConcurrentHashMap 高并发性的实现机制
- 斯诺登称美向日提供监控系统 日本人或遭大规模监控