[BZOJ1064][Noi2008]假面舞会(图论)
来源:互联网 发布:微量网 知乎 编辑:程序博客网 时间:2024/05/17 04:54
题目:
我是超链接
题解:
当图中有环时,k必定是环长度的约数,那么答案就是全部环的最大公约数和最小的大于3的公约数,若最大公约数小于3则无解;
当图中没有环时,k最大就是所有联通块最长链的和,最小就是3。
有一种不太正常的非环:
还有一种不大正常的连边:
啊啊啊如果边不一开始设成全-1的话,要想亦或只能从tot=1开始!
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int M=2000010;const int N=100010;int tot=1,nxt[M],point[N],v[M],c[M],ans;int dis[N],maxx,minn;bool vis[N],fl[M];void addline(int x,int y,int z){++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; c[tot]=z;}int gcd(int a,int b){if (!b) return a;else return gcd(b,a%b);}void dfs(int x){ vis[x]=1; for (int i=point[x];i;i=nxt[i]) if (!vis[v[i]]) { dis[v[i]]=dis[x]+c[i]; dfs(v[i]); } else ans=gcd(ans,abs(dis[x]+c[i]-dis[v[i]]));}void dfsw(int x){ maxx=max(maxx,dis[x]); minn=min(minn,dis[x]); vis[x]=1; for (int i=point[x];i;i=nxt[i]) if (!fl[i]) { fl[i]=fl[i^1]=1; dis[v[i]]=dis[x]+c[i]; dfsw(v[i]); }}int main(){ int n,m,i; scanf("%d%d",&n,&m); for (i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); addline(x,y,1); addline(y,x,-1); } for (i=1;i<=n;i++) if (!vis[i]) dfs(i); if (!ans)//无环 { memset(vis,0,sizeof(vis)); for (i=1;i<=n;i++) if (!vis[i]) { maxx=minn=dis[i]=0; dfsw(i); ans+=maxx-minn+1; } if (ans<3) printf("-1 -1"); else printf("%d 3",ans); } else { if (ans<3) printf("-1 -1"); else { for (i=3;i<=ans;i++) if (ans%i==0) break; printf("%d %d",ans,i); } }}
阅读全文
0 0
- [BZOJ1064][Noi2008]假面舞会(图论)
- [BZOJ1064][Noi2008]假面舞会
- 【BZOJ1064】【NOI2008】假面舞会
- [bzoj1064][NOI2008]假面舞会
- BZOJ1064: [Noi2008]假面舞会
- 【bzoj1064】 NOI2008 假面舞会 图论好题
- 【bzoj1064】【NOI2008】【假面舞会】【dfs】
- [图论杂题] BZOJ1064: [Noi2008]假面舞会
- 【BZOJ1064】[Noi2008]假面舞会【DFS】【分类讨论】
- 【NOI2008】假面舞会(图论,搜索)
- [BZOZ1064][NOI2008]假面舞会 图论
- BZOJ1064:假面舞会(DFS & 思维)
- bzoj 1064: [Noi2008]假面舞会 (图论+DFS)
- bzoj 1064: [Noi2008]假面舞会(DFS)
- NOI2008 假面舞会party
- [Noi2008]假面舞会
- 1064: [Noi2008]假面舞会
- bzoj 1064: [Noi2008]假面舞会
- python学习教程
- 0基础lua学习(六)控制语句
- 初步了解在线测试系统
- 程序和软件的不同
- C函数加密实现及常用字符串处理函数的使用
- [BZOJ1064][Noi2008]假面舞会(图论)
- opencv双目测距实现
- 安卓VideoView(一)
- LaTex怎么用
- 51Nod 1083 矩阵取数问题
- 解决 Anaconda 下载速度慢的问题
- 判别分析
- postgresql 死锁问题解决记录
- 洛谷 P1941 飞扬的小鸟(NOIp2014)