题意:戳这里

思路:很明显是一个图论模型。。

就两种图形:

1、图中存在环,那么就是所有环的gcd为最大答案。gcd的大于3的最小约数为最小答案

2、不存在环,那么是每个弱连通块的最长链之和为最大答案,最小答案为3。。

但是这一题最关键的是实现,实现技巧太赞了。。

首先,我们可以把每条有向边(u, v)拆成(u, v, 1), (v,  u, -1)

那么对于第二情况,对于每一个联通块直接随便找一个bfs,然后最长链就是maxdist-mindist+1

对于第一种情况,可能出现环套环的情况,这样处理起来很麻烦。。

但实际上很容易发现对于大环套小环实际上大环可以转换成大环-小环剩下的小圈求gcd。。注意这里的小圈不一定是环,因为边有正有负。。

这样正好处理可以一遍dfs处理。。

说得很抽象。。直接看这位神犇博客的图吧。。

code:

 #include <bits/stdc++.h>
#define M0(a) memset(a, 0, sizeof(a))
#define x first
#define y second
#define vii vector< pair<int, int> >::iterator
using namespace std;
const int maxn = ;
vector< pair<int, int> > e[maxn];
int n, m; int vis[maxn], d[maxn];
void init(){
for (int i = ; i <= n; ++i) e[i].clear();
int u, v;
pair<int, int> tmp;
for (int i = ; i < m; ++i){
scanf("%d%d", &u, &v);
tmp.x = v, tmp.y = ;
e[u].push_back(tmp);
tmp.x = u, tmp.y = -;
e[v].push_back(tmp);
}
} int ans;
void gao1(){
int ans1 = ans, ans2 = ans;
if (ans1 < ){
puts("-1 -1"); return;
}
for (int j = ; j <= ans; ++j) if (ans % j == ){
ans2 = j; break;
}
printf("%d %d\n", ans1, ans2);
} int bfs(const int s){
queue<int> q;
q.push(s), d[s] = , vis[s] = ;
int u, v, w;
int maxdist= , mindist = ;
while (!q.empty()){
u = q.front();
q.pop();
for (vii it = e[u].begin(); it != e[u].end(); ++it){
v = it->x, w = it->y;
if (vis[v]) continue;
d[v] = d[u] + w;
if (d[v] > maxdist) maxdist = d[v];
if (d[v] < mindist) mindist = d[v];
vis[v] = , q.push(v);
}
}
return maxdist - mindist + ;
} void gao2(){
M0(vis), M0(d);
int ans1 = ;
for (int i = ; i <= n; ++i) if (!vis[i])
ans1 += bfs(i);
if (ans1 < ) puts("-1 -1");
else printf("%d %d\n", ans1, );
} void dfs(int u){
vis[u] = ;
int v;
for (vii it = e[u].begin(); it != e[u].end(); ++it){
v = it->x;
if (vis[v])
ans = __gcd(ans, abs(d[u] + it->y - d[v]));
else
d[v] = d[u] + it->y, dfs(v);
}
} void solve(){
M0(vis), M0(d);
ans = ;
for (int i = ; i <= n; ++i) if (!vis[i])
dfs(i);
if (ans) gao1();
else gao2();
} int main(){
freopen("a.in", "r", stdin);
while (scanf("%d%d", &n, &m) != EOF){
init();
solve();
}
}

bzoj 1064的更多相关文章

  1. BZOJ 1064 假面舞会(NOI2008) DFS判环

    此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...

  2. [bzoj 1064][NOI2008]假面舞会(dfs判断环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1064 分析: 如果a看到b,则a->b 那么: 1.如果图中有环,则说明这个环的 ...

  3. bzoj 1064【noi2008】假面舞会

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1064 给一个有向图染色,每个点的后继必须相同,问至少&至多有多少种染色方案 sol: ...

  4. BZOJ 1064 假面舞会

    http://www.lydsy.com/JudgeOnline/problem.php?id=1064 思路:第一眼看的时候以为是差分约束,但是是做不了的,不过能保证的就是这题绝对是图论题...(废 ...

  5. BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题意: 思路: 考虑以下几种情况: ①无环并且是树: 无环的话就是树结构了,树结构的话想一下就 ...

  6. [BZOJ]1064: [Noi2008]假面舞会

    题目大意:n个人,k种假面,每人戴一种,戴第i种的可以看见第i+1种,戴第k种的可以看见第1种,给出m条关系表示一个人可以看到另一个人,问k可能的最大值和最小值.(n<=100,000,m< ...

  7. bzoj 1064 假面舞会 图论??+dfs

    有两种情况需要考虑 1.链:可以发现对最终的k没有影响 2.环:如果是真环(即1->2->3->4->1),可以看出所有可行解一定是该环的因数 假环呢??(1->2-&g ...

  8. bzoj 1064 noi2008 假面舞会题解

    莫名其妙的变成了我们的noip互测题... 其实这题思想还是比较简单的,只是分类不好分而已 其实就是一个dfs的事 首先,非常明显,原题目中的所有关系可以抽象成一个图(这是...显而易见的吧...) ...

  9. bzoj 1064 图论

    我们根据能否看见建图,有向图边权设成1,然后我们转成无向图, 对于每条有向边连一条反边,边权是-1,然后从每个块中任意一个点开始 dfs,每个点有一个值,经过一条边到另一个点之后,用原来的点值和边权 ...

随机推荐

  1. JS宝典

    hammerjs 终止事件流 window.event.returnValue = false; return false; 页面显示调用方法.类似viewWillApper IOS和android表 ...

  2. delphi Tab Item Badge Value 消息数标记

    https://community.embarcadero.com/blogs?view=entry&id=9074 unit TabBadgeFrm; interface uses Syst ...

  3. mgo中DBRef-数据添加测试

    2014-1-25 在设计mongo数据库时遇到这样一个问题,日志信息表需要引用人员信息表的数据.如果是结构化数据库,基本上不用想太多的东西.由于刚接触非结构化数据库,按着书上的理解由于日志数量较多, ...

  4. nginx的一些介绍和使用

    nginx 的安装 我们首先进行下载安装:http://nginx.org/download/nginx-1.4.2.tar.gz 安装准备: nginx依赖于pcre库,要先安装pcre 1 yum ...

  5. Linux_04------Linux权限的设定

    三种权限 */ /** * 修改文件所有者 * chown 用户名 文件名 */

  6. C#页面前台绑定数据 <%%><%#%><%=%>

    ASP.net前台绑定用的最多,今天小小总结一下. 1:<%#Eval("")%> 2:<%#Bind("")%> 3:<%=变量 ...

  7. eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象 http://blog.163.com/wujicaiguai%40126/blog/static/1701715 ...

  8. JAVA课程实验报告 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  9. Erlang 从入门到精通(一) 下载安装

    我的电脑配置: 系统:win8.1  x64 内存:16G 在官网下载http://www.erlang.org/

  10. Oracle 11g AWR和ADDM性能报告

    一.自动工作负载库(Automatic Workload Repository,AWR) 自动工作负载库(Automatic Workload Repository,AWR)是在Oracle公司提供的 ...