luogu 1477 [NOI2008] 假面舞会

容易发现:

  • 如果图中没有环,那么面具种数一定是所有联通块内最长链之和,最少为 \(3\) 。

  • 如果有环,则面具种数一定是所有环的大小的最大公约数。

那么只要求出每一个联通块内的最长链与环即可。

由于是有向边,难以通过有向边判断联通块,因此考虑建立一个反向边。将原来的边边权设为 \(1\) ,反向边边权设为 \(-1\) 。

在 \(\text{dfs}\) 时记录这个联通块内最大、最小的 \(dep\) ,相减即为最长链。而如果遇到了已经访问过的点,那么一定有环。

#include<bits/stdc++.h>
using namespace std;
#define infll 0x7f7f7f7f7f7f7f7fll
#define inf 0x3f3f3f3f
#define Maxn 100005
#define Maxm 1000005
typedef long long ll;
inline int rd()
{
int x=0;
char ch,t=0;
while(!isdigit(ch = getchar())) t|=ch=='-';
while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();
return x=t?-x:x;
}
int gcd(int x,int y){ return (y==0)?x:gcd(y,x%y); }
int n,m,tot,ans1,ans2,maxx,minn;
int dfn[Maxn],hea[Maxn],nex[Maxm<<1],ver[Maxm<<1],edg[Maxm<<1];
bool vis[Maxn];
void add(int x,int y,int d){ ver[++tot]=y,nex[tot]=hea[x],hea[x]=tot,edg[tot]=d; }
void dfs(int x,int Dep)
{
if(vis[x]) { ans1=gcd(ans1,abs(Dep-dfn[x])); return; }
dfn[x]=Dep,vis[x]=true;
maxx=max(maxx,dfn[x]),minn=min(minn,dfn[x]);
for(int i=hea[x];i;i=nex[i]) dfs(ver[i],Dep+edg[i]);
}
int main()
{
n=rd(),m=rd();
for(int i=1,x,y;i<=m;i++) x=rd(),y=rd(),add(x,y,1),add(y,x,-1);
for(int i=1;i<=n;i++) if(!vis[i])
maxx=-inf,minn=inf,dfs(i,0),ans2+=maxx-minn+1;
if(ans1)
{
if(ans1<3) printf("-1 -1\n");
else
{
for(int i=3;i<=ans1;i++)
if(ans1%i==0) { printf("%d %d\n",ans1,i); break; }
}
}
else
{
if(ans2<3) printf("-1 -1\n");
else printf("%d 3\n",ans2);
}
return 0;
}

【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链的更多相关文章

  1. NOI2008假面舞会

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 883  Solved: 462[Submit][Status] ...

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

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

  3. [BZOJ1064][Noi2008]假面舞会

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

  4. 【洛谷】1477:[NOI2008]假面舞会【图论】

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

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

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

  6. Sam做题记录

    Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...

  7. 退役IV次后做题记录

    退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...

  8. BJOI做题记录

    BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...

  9. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

随机推荐

  1. 分布式必备理论基础:CAP和BASE

    大家好,我是老三,今天是没有刷题的一天,心情愉悦,给大家分享两个简单的知识点:分布式理论中的CAP和BASE. CAP理论 什么是CAP CAP原则又称CAP定理,指的是在一个分布式系统中,Consi ...

  2. freeswitch 编译安装后的配置

    --------------------FreeSWITCH configuration------------Locations: prefix: /usr/local/freeswitchexec ...

  3. 机器学习——K-Means算法

    1 基础知识 相似度或距离 假设有 $m$ 个样本,每个样本由 $n$ 个属性的特征向量组成,样本合集 可以用矩阵 $X$ 表示 $X=[x_{ij}]_{mn}=\begin{bmatrix}x_{ ...

  4. # Zombie Gunship Survival(僵尸炮艇生存)GG修改器修改教程

    Zombie Gunship Survival(僵尸炮艇生存)GG修改器修改教程 1.修改伤害,打击范围,武器冷却时间,子弹容量 测试手机机型:华为畅享7 系统版本:Android7.0 是否ROOT ...

  5. 使用IntelliJ工具打包kotlin为bat文件运行报错 Exception in thread "main" java.lang.NoClassDefFoundError

    Exception in thread "main" java.lang.NoClassDefFoundError 这个很有可能是因为idea里的java版本与电脑上的java环境 ...

  6. Shell系列(25)- 条件判断之文件权限

    按照文件权限进行判断 读.写.执行等选项权限,只要有,就返回真 不会按照所属者,所属用户组,其他用户进行区分 先判断文件是否存在,再去判断选项权限 测试选项 作用(标红熟记) -r 文件 判断该文件是 ...

  7. php无限分类 构建树形结构

    <?php class Classification { const PARENT_ID = 'parentid'; const ID = 'id'; const CHILDREN = 'chi ...

  8. kibana操作

    一些KIBANA的操作,记录下,免下次重复写 #创建索引名为kb_question的索引,并添加mapping,即各字段属性 PUT kb_question { "mappings" ...

  9. 基于 Ubuntu 21.04 BPF 开发环境全攻略

    本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基 ...

  10. windows下如何查看所有端口及占用

    1.在windows下查看所有端口: 先点击电脑左下角的开始,然后选择运行选项,接着我们在弹出的窗口中,输入[cmd]命令,进行命令提示符. 然后我们在窗口中输入[netstat -ano]按下回车, ...