hdu5354 Bipartite Graph
分治+并查集。假设要求[L,mid]的答案,那么很明显,如果一条边的两个端点都>mid的话或者一个端点>mid一个端点<L,说明询问[L,mid]这个区间中任何一点时候,这一条边都是连接的,否则的话递归下去处理。[mid+1,R]同理。
一个图不是二分图的话说明存在奇环,奇环可以用并查集处理。这里的并查集不使用路径压缩而使用按轶合并。并查集的还原操作可以用一个栈记录每次合并时的具体操作,然后按序还原即可。
代码
1 #include<cstdio> 2 #include<vector> 3 #define N 300010 4 using namespace std; 5 int f[N],d[N]; 6 int n,m,i,dp; 7 int tt[N],pre[N],p[N],ans[N],flag[N]; 8 int tot,stack[N],a[N],b[N],g[N]; 9 vector<int> vec[N]; 10 void link(int x,int y) 11 { 12 dp++;pre[dp]=p[x];p[x]=dp;tt[dp]=y; 13 } 14 int getfa(int x,int& y) 15 { 16 y=0; 17 while (x!=f[x]) 18 { 19 y^=g[x]; 20 x=f[x]; 21 } 22 return x; 23 } 24 void Union(int x,int y,int &z) 25 { 26 int disx,disy; 27 x=getfa(x,disx); 28 y=getfa(y,disy); 29 if (x!=y) 30 { 31 if (d[x]>d[y]) x^=y^=x^=y; 32 f[x]=y; 33 g[x]=(disx^disy^1); 34 tot++;stack[tot]=x; 35 if (d[x]==d[y]) 36 { 37 flag[tot]=1; 38 d[y]++; 39 } 40 else 41 flag[tot]=0; 42 } 43 else 44 { 45 if (disx^disy^1) 46 z|=1; 47 } 48 } 49 void recover(int x) 50 { 51 while (tot>x) 52 { 53 if (flag[tot]) 54 d[f[stack[tot]]]--; 55 f[stack[tot]]=stack[tot]; 56 g[stack[tot]]=0; 57 tot--; 58 } 59 } 60 void solve(int x,int l,int r,int q) 61 { 62 int i,tmp,len,t,Ans; 63 if (l==r) 64 { 65 ans[l]=1-q; 66 return; 67 } 68 int mid=(l+r)>>1; 69 70 vec[2*x].clear(); 71 vec[2*x+1].clear(); 72 tmp=tot; 73 Ans=q; 74 len=vec[x].size(); 75 for (i=0;i<len;i++) 76 { 77 t=vec[x][i]; 78 if ((a[t]>mid)||((a[t]<l)&&(b[t]>mid))) 79 Union(a[t],b[t],Ans); 80 else 81 vec[2*x].push_back(t); 82 } 83 solve(2*x,l,mid,Ans); 84 85 Ans=q; 86 recover(tmp); 87 for (i=0;i<len;i++) 88 { 89 t=vec[x][i]; 90 if ((b[t]<mid+1)||((a[t]<mid+1)&&(b[t]>r))) 91 Union(a[t],b[t],Ans); 92 else 93 vec[2*x+1].push_back(t); 94 } 95 solve(2*x+1,mid+1,r,Ans); 96 } 97 int main() 98 { 99 int tt; 100 scanf("%d",&tt); 101 while (tt) 102 { 103 tt--; 104 scanf("%d%d",&n,&m); 105 for (i=1;i<=n;i++) 106 { 107 g[i]=0; 108 f[i]=i; 109 } 110 tot=0; 111 vec[1].clear(); 112 for (i=1;i<=m;i++) 113 { 114 scanf("%d%d",&a[i],&b[i]); 115 if (a[i]>b[i]) 116 a[i]^=b[i]^=a[i]^=b[i]; 117 vec[1].push_back(i); 118 } 119 solve(1,1,n,0); 120 for (i=1;i<=n;i++) 121 printf("%d",ans[i]); 122 printf("\n"); 123 } 124 }
转载于:https://www.cnblogs.com/fzmh/p/4719609.html
hdu5354 Bipartite Graph相关推荐
- B - A Funny Bipartite Graph
B - A Funny Bipartite Graph 题意: 一个二分图,左右各有n个点,左边第i个点有一个属性mi,它在一个图中的价值为midi,其中di为它在图中的度数(特殊的,如果度数为0,则 ...
- Fast spectral clustering learning with hierarchical bipartite graph for large-scale data
Fast spectral clustering learning with hierarchical bipartite graph for large-scale data 基于层次二分图的大规模 ...
- 二分匹配大总结——Bipartite Graph Matchings[LnJJF]
文章目录 二分匹配--Bipartite Graph Matchings[LnJJF] 认识:什么是二分图? 理解:现实模型如何与二分图相互转化? 如何判断能否转化? 能够转化的话,如何转化? 应用: ...
- Bipartite graph/network学习
Bipartite graph/network翻译过来就是:二分图. 维基百科中对二分图的介绍为:二分图是一类图(G,E),其中G是顶点的集合,E为边的集合,并且G可以分成两个不相交的集合U和V,E中 ...
- Bipartite Graph Based Multi-View Clustering
Bipartite Graph Based Multi-View Clustering 基于二部图的多视图聚类 abstract 对于基于图的多视图聚类,一个关键问题是通过两阶段学习方案捕获共识聚类结 ...
- C#,图论与图算法,二分图(Bipartite Graph)的霍普克罗夫特-卡普(Hopcroft Karp)最大匹配算法与源程序
二分图Bipartite graph 有没有可能通过数学过程找到你的灵魂伴侣?大概让我们一起探索吧! 假设有两组人注册了约会服务.在他们注册后,会向他们展示另一组人的图像并给出他们的描述.他们被要求选 ...
- Bipartite Graph多视图学习聚类文章总结
看了一些anchor graph和bipartite graph 的文章始终不知道他们的区别在哪里.今天总结一下这类文章. 1.能看到最早的这类关于多视图学习的文章 Large-Scale Multi ...
- 论文阅读 [TPAMI-2022] Multiview Clustering: A Scalable and Parameter-Free Bipartite Graph Fusion Method
论文阅读 [TPAMI-2022] Multiview Clustering: A Scalable and Parameter-Free Bipartite Graph Fusion Method ...
- CF600F:Edge coloring of bipartite graph(二分图、构造)
解析 首先大胆猜结论:答案就是最大的点度数 考虑如何构造 设一个点联通的边的颜色集合为S,由题意得S中的元素不可重 假设新加入一条边(u,v) 设c1=mex(Su),c2=mex(Sv)c1=mex ...
最新文章
- 潘建伟团队最新研究成果登上Nature:首次实现1120公里长距离无中继纠缠量子密钥分发...
- php的session实现
- flutter实现(OutlineButton)线框按钮
- 内网渗透-域内有网和无网
- SQLite在指定列后面插入字段_个人学习系列 - 防止MySQL重复插入数据
- 如何评价分类模型性能?(足球荔枝)
- Linux下Makefile的automake生成全攻略
- 前端学习(3088):vue+element今日头条管理-关于接口的使用(有声版)
- python matplotlib 散点图_python matplotlib散点图颜色
- Oracle/PLSQL AFTER DELETE Trigger
- kali 2019-4中文乱码解决方法
- meta http-equiv(属性详解)
- ubuntu samba配置
- QT 静态链接库和动态链接库
- PyQt5教程(二)——PyQt5的安装(详细)
- OpenLayers叠加天地图矢量、影像、注记
- vsode 编译报错:main.c:4:10: fatal error: iostream: 没有那个文件或目录
- forward和include的区别详解
- 六年如逆旅,我亦是行人:一个顾问的六年安全从业经历
- Xception实现动物识别(TensorFlow)