bzoj 1064 图论
我们根据能否看见建图,有向图边权设成1,然后我们转成无向图,
对于每条有向边连一条反边,边权是-1,然后从每个块中任意一个点开始
dfs,每个点有一个值,经过一条边到另一个点之后,用原来的点值和边权
更新新的点的点值,那么如果我们访问到了一个原来已经走过的点,那么我们
找到了一个环(可能是非环,就是一个点出两条有向边,然后又交在一点了),由于
数据是合法的,所以这样的非环的现在应该更新成的点值和原有的点值相等,如果不相等
的话,取差值的绝对值,就是这个环的长度。
那么我们对于所有块,每个块的环的长度都是种类数的倍数,所以取gcd就好了
还有一种情况就是没有环,全都是以链的形式存在的,对于这种形式,我们每个块
染色,然后找到每个块中点值最大的最小的差值就是最长链的长度。
无解的情况比较容易讨论,在此不再赘述。
/**************************************************************Problem: 1064User: BLADEVILLanguage: PascalResult: AcceptedTime:284 msMemory:34596 kb ****************************************************************/{$M 65536000} //By BLADEVIL varn, m :longint;pre, other, len :array[0..2000020] of longint;last :array[0..100010] of longint;l :longint;flag :array[0..100010] of boolean;size, father, key, tmin, tmax :array[0..100010] of longint;g :array[0..2000100] of longint;ans1, ans2 :longint;procedure swap(var a,b:longint); varc :longint; beginc:=a; a:=b; b:=c; end;function min(a,b:longint):longint; beginif a>b then min:=b else min:=a; end;function max(a,b:longint):longint; beginif a>b then max:=a else max:=b; end;function gcd(a,b:longint):longint; beginif b>a then swap(a,b);if b=0 then exit(a) else exit(gcd(b,a mod b)); end;procedure connect(x,y,z:longint); begininc(l);pre[l]:=last[x];last[x]:=l;other[l]:=y;len[l]:=z; end;procedure dfs(x:longint); varq, p :longint; beginflag[x]:=true;q:=last[x];while q<>0 dobeginp:=other[q];if len[q]=1 then father[p]:=x;if not flag[p] thenbeginflag[p]:=true;size[p]:=size[x]+len[q];key[p]:=key[x];dfs(p);end elsebegininc(g[0]);g[g[0]]:=abs(size[x]+len[q]-size[p]);if g[g[0]]=0 then dec(g[0]);end;q:=pre[q];end; end;procedure init; vari :longint;x, y :longint; beginread(n,m);for i:=1 to m dobeginread(x,y);connect(x,y,1);connect(y,x,-1);end;for i:=1 to n do father[i]:=-1;for i:=1 to n do if not flag[i] then dfs(i); end;procedure main; vari :longint; beginif g[0]=0 thenbeginfillchar(flag,sizeof(flag),false);for i:=1 to n do if (father[i]=-1) and (key[i]=0) thenbeginkey[i]:=i;dfs(i);end;for i:=1 to n do tmax[i]:=-maxlongint;for i:=1 to n do tmin[i]:=maxlongint;for i:=1 to n dobegintmax[key[i]]:=max(tmax[key[i]],size[i]);tmin[key[i]]:=min(tmin[key[i]],size[i]);end;for i:=1 to n do if tmin[i]<>maxlongint then inc(ans1,tmax[i]-tmin[i]+1);if ans1<3 thenbeginwriteln(-1,' ',-1);exit;end elsebeginwriteln(ans1,' ',3);exit;end;end elsebeginans1:=g[1];for i:=2 to g[0] doans1:=gcd(ans1,g[i]);if ans1<3 thenbeginwriteln(-1,' ',-1);exit;end elsebeginans2:=0;for i:=3 to ans1 doif ans1 mod i=0 thenbeginans2:=i;break;end;if ans2=0 then ans2:=ans1;writeln(ans1,' ',ans2);end;end; end;begininit;main; end.
转载于:https://www.cnblogs.com/BLADEVIL/p/3489845.html
bzoj 1064 图论相关推荐
- [BZOJ 1064][NOI 2008]假面舞会(图论+BFS)
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题目大意 给一个有向图染色,一个点的后继的颜色必须全部相同,问最多多少种颜色,最少多 ...
- BZOJ 1064 假面舞会(图论-连通分量)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1064 题意:一年一度的假面舞会又开始了,栋栋也 兴致勃勃的参加了今年的舞会.今年的面具都 ...
- BZOJ 1064 假面舞会
1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MB Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年 ...
- bzoj 1064: [Noi2008]假面舞会(DFS)
1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2240 Solved: 1083 [Submit][Sta ...
- [BZOJ]1064 [NOI2008] 假面舞会 dfs判环
1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2160 Solved: 1047 [Submit][Sta ...
- 【BZOJ 1064】【NOI 2008】假面舞会
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
- bzoj 1064 noi2008 假面舞会题解
莫名其妙的变成了我们的noip互测题... 其实这题思想还是比较简单的,只是分类不好分而已 其实就是一个dfs的事 首先,非常明显,原题目中的所有关系可以抽象成一个图(这是...显而易见的吧...) ...
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1655 Solved: 798 [Submit] ...
- 菜谱小程序_喝鸡尾酒食谱应用程序
菜谱小程序 The process of making a useful drink library 制作有用的饮料库的过程 Do you ever try a drink at a bar and ...
最新文章
- java数据结构排序实验报告_java数据结构与算法之插入排序详解
- 虚拟机:请问我刚刚回收的对象是干垃圾还是湿垃圾?|文末送书
- 【AI视野·今日CV 计算机视觉论文速览 第194期】Mon, 10 May 2021
- Python使用matplotlib进行可视化时精确控制图例位置
- Redis五大数据类型String、Hash、List、Set、ZSet
- 问一个 TCP 连接可以发多少个 HTTP 请求?
- PCBA电路板中电容MLCC失效分析-应力测试作业指导
- 金蝶kis商贸采购单商品代码_金蝶KIS商贸版操作明细
- word找不到橡皮擦工具
- Java HotSpot(TM) 64-Bit Server VM warning:
- android音频系统(4):AudioService之音量管理
- 鸿蒙系统有没有方舟编译器,华为鸿蒙系统终于来了! 首款方舟编译器应用正式上架: 鸿蒙OS可用...
- 什么是 SHA 加密? SHA-1 与 SHA-2
- 台达PLC与单片机的通讯
- strip()函数用法简介
- 亚马逊广告授权流程说明
- CSRF攻击实验 ——合天网安实验室学习笔记
- python matplotlib绘制gif动图以及保存
- 还不知道图片去水印怎么去?看看这篇文章就知道了
- SpringBoot在使用Security和JWT时,应当怎么放行图片等静态资源#访问静态资源#静态资源放行#报错401