莫名其妙的变成了我们的noip互测题...

其实这题思想还是比较简单的,只是分类不好分而已

其实就是一个dfs的事

首先,非常明显,原题目中的所有关系可以抽象成一个图(这是...显而易见的吧...)

接下来,我们仅需在图上讨论即可

当然,这个图有几个部分组成其实并没有那么重要,毕竟,这些部分基本是互不干扰的。

所以接下来我们只需要对每一个块分别处理即可

我们来分类:

首先,如果所有块都是树,我们只需求出每个树上的最长链即可

接下来,如果存在环(包括真实的环和类环,即1-2-3-1和1-2-4+1-3-4两种),那么种类数最多显然是所有

环大小的gcd(至于其他的树,可以完全不必考虑了)

于是问题就变成了怎么求环的大小

请大家注意一点,就是我们所说的环的大小是指的一个环中之多可以有几种面具

也就是说,对于一个这样的环:1-2-4和1-3-4,很显然2和3的编号应该是一样的,这样我们说这个类环的大小是3!

接下来我们讨论一下怎么求

其实求法很简单:化有向图为带权无向图!

即:如果这条边是正向的,我们把他的边权设为+1,反之设为-1

这样做的目的在于,还是以上面的图为例:1-2-4和1-3-4,我们双向建边就能求出环的大小(自己画一下,一下就出来)

剩下的部分就聊尽人事了

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
struct Edge
{int next;int to;int val;
}edge[2000005];
int head[100005];
int dep[100005];
int cnt=1;
int d;
int n,m;
int maxdep,mindep=0x3f3f3f3f;
bool used[100005];
void init()
{memset(head,-1,sizeof(head));cnt=1;
}
int gcd(int x,int y)
{if(y==0){return x;}return gcd(y,x%y);
}
void add(int l,int r,int w)
{edge[cnt].next=head[l];edge[cnt].to=r;edge[cnt].val=w;head[l]=cnt++;
}
void dfs(int x,int deep)
{used[x]=1;dep[x]=deep;maxdep=max(maxdep,dep[x]);mindep=min(mindep,dep[x]);for(int i=head[x];i!=-1;i=edge[i].next){int to=edge[i].to;if(!used[to]){dfs(to,deep+edge[i].val);}else{d=gcd(d,abs(deep+edge[i].val-dep[to]));}}
}
inline int read()
{int f=1,x=0;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;
}
int main()
{
//  freopen("party.in","r",stdin);
//  freopen("party.out","w",stdout);n=read(),m=read();init();for(int i=1;i<=m;i++){int x=read(),y=read();add(x,y,1);add(y,x,-1);}int ret=0;for(int i=1;i<=n;i++){if(!used[i]){maxdep=0;mindep=0x3f3f3f3f;dfs(i,1);ret+=maxdep-mindep+1;}}if(!d){if(ret>=3){printf("%d 3\n",ret);return 0;}else{printf("-1 -1\n");return 0;}}else{if(d<3){printf("-1 -1\n");return 0;}for(int i=3;i<=d;i++){if(d%i==0){printf("%d %d\n",d,i);return 0;}}}
}

bzoj 1064 noi2008 假面舞会题解相关推荐

  1. [BZOJ]1064 [NOI2008] 假面舞会 dfs判环

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2160  Solved: 1047 [Submit][Sta ...

  2. bzoj 1064: [Noi2008]假面舞会(DFS)

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2240  Solved: 1083 [Submit][Sta ...

  3. 1064: [Noi2008]假面舞会

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1960  Solved: 941 [Submit][Stat ...

  4. 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]

    BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1655  Solved: 798 [Submit] ...

  5. 【BZOJ1064】[Noi2008]假面舞会 DFS树

    [BZOJ1064][Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 ...

  6. 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链

    luogu 1477 [NOI2008] 假面舞会 容易发现: 如果图中没有环,那么面具种数一定是所有联通块内最长链之和,最少为 \(3\) . 如果有环,则面具种数一定是所有环的大小的最大公约数. ...

  7. [Noi2008]假面舞会(dfs判环)

    [Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...

  8. 洛谷 P1477 [NOI2008]假面舞会

    题目链接 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办方 ...

  9. 【图论 搜索】bzoj1064: [Noi2008]假面舞会

    做到最后发现还是读题比赛:不过还是很好的图论题的 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选 ...

最新文章

  1. 【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)
  2. 科大讯飞全新1024:3大计划,200项A.I.能力,全链路驱动应用场景创新!
  3. SQLite命令行程序说明
  4. [一维粒子模拟 version3.6]实现initial.m函数
  5. Android 编程下 px - dp 的相互转换
  6. 找不到显示桌面的快捷方式怎么办|显示桌面的快捷方式找不到解决方法|显示桌面代码|...
  7. python 打卡程序_如何用python实现腾讯文档自动打卡并定时执行
  8. 使用pdfviewer预览报错PDF.js v2.9.359 (build: e667c8cbc)信息:file origin does not match viewer‘s
  9. MySQL中按天、自然周、月、季度、年份统计
  10. OpenCV入门笔记-更新篇
  11. AWS云上基础服务体验课程
  12. 整数转成RGB颜色值
  13. 乐变热更新SDK的集成
  14. PTA 互评成绩(sort函数)
  15. 面试官: 说一下前端组件设计的原则
  16. 基金训练营学习笔记7-止盈
  17. 分布式全文搜索引擎——Elasticsearch
  18. Unity 官方教程1
  19. GBase 8m的高可用性详解
  20. c语言字符串碱基互补配对,碱基互补配对原则

热门文章

  1. 3月18日云栖精选夜读 | 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!... 1
  2. Adobe Premiere Pro CS6的视频剪辑简单教程
  3. 默哀这一刻 我们的心紧紧相连
  4. WIN7下开机欢迎界面去掉画面下方windows 7 旗舰版
  5. Python爬虫笔记——解析json数据(以周杰伦歌单为例)及Headers
  6. 微软 2021 秋季发布会汇总
  7. Blackboard在线教学管理平台
  8. LangSrcCurise ubuntu18.04部署指北
  9. java的this和supper
  10. android壁纸 镭光,Blur Wallpaper