[HAOI2017]新型城市化
题目大意
一副图告诉你那些点之间没有连边,并保证整幅图可以被划分为至多两个团。
请你找出每一对没有连边的点,使得它们连边后,图中最大团的大小会变大。
模型转化
因为原图要被分成至多两个团,其补图一定是二分图。
最大团大小等同于最大独立集大小,因此和最大匹配挂钩。
求哪些边一定在最大匹配上。
做法
先做最大匹配算法。
一定在最大匹配上的边一定是匹配边(显然)。
然后考虑三种情况会使得匹配边u->v不一定在最大匹配中。
1、在残余网络中,u可以到达T。
如果退流u->v,那么S就可以走u,又因为u能到达T,最大匹配不会变,则u->v不一定在最大匹配中。
2、在残余网络中,S可以到达v。
同理。
这两种情况随便搜一遍就可以判。
3、在残余网络中,u可以到达v。
如果退流u->v,那么S走到u,u走到v,v再到T,最大匹配不会变。
则u->v不一定在最大匹配中。
这种情况注意u->v是匹配边,所以v连了有向边到u,因此u和v处在一个环中。可以做一遍Tarjan,就能判掉。
#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=10000+10,maxm=150000+10;
struct dong{int x,y;
} ans[maxm];
int h2[maxn],g2[maxm*2],n2[maxm*2];
int h[maxn],go[maxm*2],next[maxm*2];
int h3[maxn],g3[maxm*2],n3[maxm*2];
int co[maxn],re[maxn],A[maxn],B[maxn],belong[maxn],dfn[maxn],low[maxn],sta[maxn];
int pd[maxn];
bool bz[maxn];
int i,j,k,l,r,s,t,n,m,tot,top,cnt,cnt1,cnt2;
int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
void add(int x,int y){go[++tot]=y;next[tot]=h[x];h[x]=tot;
}
void add2(int x,int y){g2[++cnt]=y;n2[cnt]=h2[x];h2[x]=cnt;
}
void add3(int x,int y){g3[++cnt]=y;n3[cnt]=h3[x];h3[x]=cnt;
}
void dfs(int x,int y){co[x]=y;if (y) B[++cnt2]=x;else A[++cnt1]=x;int t=h2[x];bz[x]=1;while (t){if (!bz[g2[t]]) dfs(g2[t],1-y);t=n2[t];}
}
int hungary(int x){int t=h[x];while (t){if (pd[go[t]]<j){pd[go[t]]=j;if (re[go[t]]==0||hungary(re[go[t]])){re[go[t]]=x;return 1;}}t=next[t];}return 0;
}
void dg(int x){co[x]=1;bz[x]=1;int t=h[x];while (t){if (!bz[go[t]]&&re[go[t]]!=x){bz[go[t]]=1;co[go[t]]=1;if (re[go[t]]&&!bz[re[go[t]]]) dg(re[go[t]]);}t=next[t];}
}
void travel(int x,int y){co[x]=2;bz[x]=1;if (y==1){int t=h[x];while (t){if (re[x]!=go[t]&&!bz[go[t]]) travel(go[t],0);t=next[t];}}else{int t=h[x];while (t){if (re[go[t]]==x&&!bz[go[t]]) travel(go[t],1);t=next[t];}}
}
bool cmp(dong a,dong b){return a.x<b.x||a.x==b.x&&a.y<b.y;
}
void tarjan(int x){bz[x]=1;sta[++top]=x;pd[x]=1;dfn[x]=low[x]=++cnt;int t=h3[x];while (t){if (!bz[g3[t]]){tarjan(g3[t]);low[x]=min(low[x],low[g3[t]]);}else if (pd[g3[t]]) low[x]=min(low[x],dfn[g3[t]]);t=n3[t];}if (dfn[x]==low[x]){++tot;do{belong[sta[top]]=tot;pd[sta[top]]=0;top--;}while (sta[top+1]!=x);}
}
int main(){freopen("a.in","r",stdin);freopen("a.out","w",stdout);n=read();m=read();fo(i,1,m){j=read();k=read();add2(j,k);add2(k,j);}fo(i,1,n) if (!bz[i]) dfs(i,0);fo(i,1,m){j=g2[i*2-1];k=g2[i*2];if (co[j]) swap(j,k);add(j,k);add(k,j);}fo(i,1,cnt1){j++;hungary(A[i]);}fo(i,1,n) co[i]=bz[i]=pd[i]=0;fo(i,1,cnt2){k=B[i];if (re[k]) pd[re[k]]=1;}fo(i,1,cnt1){k=A[i];if (!bz[k]&&!pd[k]) dg(k);}fo(i,1,n) bz[i]=0;fo(i,1,cnt2){k=B[i];if (!bz[k]&&re[k]==0) travel(k,1);}cnt=0;fo(i,1,cnt1){k=A[i];t=h[k];while (t){if (re[go[t]]==k) add3(go[t],k);else add3(k,go[t]);t=next[t];}}cnt=top=tot=0;fo(i,1,n) bz[i]=pd[i]=0;fo(i,1,n)if (!bz[i]) tarjan(i);top=0;fo(i,1,m){j=go[i*2];k=go[i*2-1];if (re[k]==j&&co[j]!=2&&co[k]!=1&&belong[j]!=belong[k]){if (j>k) swap(j,k);ans[++top].x=j;ans[top].y=k;}}sort(ans+1,ans+top+1,cmp);printf("%d\n",top);fo(i,1,top) printf("%d %d\n",ans[i].x,ans[i].y);
}
[HAOI2017]新型城市化相关推荐
- Luogu P3731 [HAOI2017]新型城市化
题目显然可以转化为求每一条边对二分图最大独立集的贡献,二分图最大独立集\(=\)点数\(-\)最大匹配数,我们就有了\(50pts\)做法. 正解的做法是在原图上跑\(Tarjan\),最开始我想复杂 ...
- 精准扶贫电商重整流通-农业大健康·李玉庭: 谋定功能农产品
精准扶贫电商重整流通-农业大健康·李玉庭: 谋定功能农产品 中国食品报 中国经济和信息化网 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万赢信采编: & ...
- 农村电商谋定双创工程-李玉庭:互联网+农产品重整流通
农村电商谋定双创工程-李玉庭:互联网+农产品重整流通 中国食品报 中国经济和信息化网 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万赢信采编:"在今年全 ...
- 地摊经济和夜经济-国情讲坛·周荣江:城市生态谋定治理转型
地摊经济和夜经济-国情讲坛·周荣江:城市生态谋定治理转型 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万赢信采编:"夜经济既丰富了国民生活,对 ...
- 同济大学核心学术刊物基本目录_党建丨清华大学建筑学院、同济大学建筑与城市规划学院研究生党支部联合举办“城乡二元关系与生态文明建设内涵”主题党日活动...
01 开场 2020年11月7日,由清华大学建筑学院党建中心.中共同济大学建筑与城市规划学院研究生总支委员会联合主办,清华大学建筑学院建研183党支部.同济大学建筑与城市规划学院研究生第五.七.十六 ...
- 中国园区经济行业“十四五“规划与前景深度研究报告2021年版
[撰写单位]:鸿晟信合研究院 第一部分 产业环境透视 第一章 园区经济发展综述 第一节 园区经济定义及类型 一.园区经济定义 二.园区经济类型 三.建设现代园区经济的方法 第二节 园区经济的组成要素 ...
- 智慧城市指挥调度系统软件解决方案
智慧城市指挥调度系统软件解决方案 智慧城市一站式指挥调度中心利用信息整合技术,推动资源互联互通,实行部门集中办公,消除信息孤岛,实现资源共享,节约建设投资,是政府实施统一宣传.统一服务.创新服务,进行 ...
- 霍尼韦尔和西安开米深入合作;中国采购行业出现W形复苏迹象 | 美通企业日报...
今日看点 霍尼韦尔和西安开米深入合作,打造更健康安全的高端智能楼宇.西安开米开发的万瑞府高端公寓坐落西安高新区核心地段,并配套世界经典酒店.国际总部办公中心.艺术商业中心,集建筑.设计与生活为一体,将 ...
- 【特色小镇】智慧小镇:小镇建设总体规划方案
有些地方将智慧小镇建设当做智慧城市的新包装,一些地方被企业营销牵着鼻子走,国内智慧小镇虚火过旺和盲目贴标签的行为也广为诟病.国家智慧小镇工作将在探索和指标体系的实施过程中,对国内智慧小镇建设存在的诸多 ...
最新文章
- 我对Java Serializable(序列化)的理解和总结
- 高效Java编程工具集锦
- 基于注解的字段脱敏处理
- MS SQL开发命名规则
- html调用阅读模式,easyread.js—给网站开启阅读模式html教程
- css的几种垂直水平居中方法
- 年轻人不讲武德不仅白piao接口测试知识还白piao接口测试工具会员
- linux能装ps,在linux上使用ps(转载)
- 专升本计算机专业是理工类吗,理工类专接本有些专业
- java 映射servlet,java – 将映射或对象从jsp传递到servlet
- oracle 导入时出现两个,Oracle的导入及两个错误
- android 广播 源码,广播电台APP源代码 电台APP源代码 播客APP源代码 Android源代码...
- mysqlserver 下载安装
- 拼多多网站的服务器多大,拼多多打不开网页怎么回事
- 怎样恢复手机oracle默认窗口,通达信恢复默认版面,Effects界面如何恢复初始默认设置...
- MPEG-2 TS学习(一)MPEG-2 TS格式解析
- 达人评测 骁龙778g和骁龙780g的区别 选哪个好
- 一台计算机有多少公顷,亩换算成公顷(公顷换算成亩的计算器)
- 把数字翻译成字符串python_把数字翻译成字符串
- 1.2文字排版、颜色、表格、图像形状、Jumbotron、信息提示框、按钮、按钮组、徽章、加载效果、分页、列表组、卡片、下拉菜单、折叠
热门文章
- IDEA 启动报错:java.lang.IllegalStateException: failed to create a child event loop 问题解决
- 还在羡慕华为手机能当门禁卡?其实iPhone也可以,一招教你学会
- 计算机ppt密码是什么,ppt密码如何设置,这个保护你文件的计算机技能很实用
- 合天网络靶场能力详解
- pcb二次钻孔_PCB板钻孔工艺缺陷及排除方法
- ubuntu查看 固态硬盘位置_Ubuntu 固态硬盘 4K对齐及启用 Trim,及其验证方法
- 四川大学计算机应用基础考试试题,几个有关计算机基础的题目!!!~~
- 成都大学生接连遭遇购物网“被注册” 疑信息泄露
- 西安IATF16949认证_西安IATF16949咨询_8.3.3.2制造过程设计输入
- 传统行业是否使用微服务的讨论——不够痛就别微服务