博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1051: [HAOI2006]受欢迎的牛
阅读量:6259 次
发布时间:2019-06-22

本文共 1819 字,大约阅读时间需要 6 分钟。

1 #include
2 #include
3 #define M 50008 4 using namespace std; 5 int du[M],ti,ti1,cnt,head[M],head1[M],next1[10*M],u1[10*M],next[10*M],u[M],n,m,dfn[M],low[M],t,zhan[M],f[M],bel[M],sum[M]; 6 void jia(int a1,int a2) 7 { 8 cnt++; 9 next[cnt]=head[a1];10 head[a1]=cnt;11 u[cnt]=a2;12 }13 void jia1(int a1,int a2)14 {15 cnt++;16 next1[cnt]=head1[a1];17 head1[a1]=cnt;18 u1[cnt]=a2; 19 du[a1]++;20 }21 void tarjin(int a1)22 {23 dfn[a1]=low[a1]=++ti;24 f[a1]=1;25 t++;26 zhan[t]=a1;27 for(int i=head[a1];i;i=next[i])28 if(!dfn[u[i]])29 {30 tarjin(u[i]);31 low[a1]=min(low[a1],low[u[i]]);32 }33 else if(f[u[i]])34 low[a1]=min(low[a1],dfn[u[i]]);35 if(dfn[a1]==low[a1])36 {37 ++ti1;38 int now=0;39 for(;now!=a1;)40 {41 now=zhan[t];42 bel[now]=ti1;43 sum[ti1]++;44 f[now]=0;45 t--;46 }47 }48 }49 void jian()50 {51 cnt=0;52 for(int i=1;i<=n;i++)53 for(int j=head[i];j;j=next[j])54 if(bel[i]!=bel[u[j]])55 jia1(bel[i],bel[u[j]]);56 }57 int main()58 {59 scanf("%d%d",&n,&m);60 for(int i=1;i<=m;i++)61 {62 int a1,a2;63 scanf("%d%d",&a1,&a2);64 jia(a1,a2);65 }66 for(int i=1;i<=n;i++)67 if(!dfn[i])68 tarjin(i);69 jian();70 int s=0,s1;71 for(int i=1;i<=ti1;i++)72 if(!du[i])73 {74 s++;75 s1=i;76 }77 if(s>1)78 printf("0");79 else80 printf("%d",sum[s1]);81 return 0;82 }

按题目建图后,用tarjan缩点,统计没有出度的联通块的个数,如果只有一个,输出这个联通块内点的个数,否则为零。

转载于:https://www.cnblogs.com/xydddd/p/5232786.html

你可能感兴趣的文章
获取类中虚函数地址
查看>>
TimeUnit
查看>>
王垠的40行代码,究竟diao在哪里
查看>>
MODBUS协议在dspic上通信应用程序
查看>>
python课程设计笔记(二)破冰基本语法
查看>>
内存的那些事
查看>>
HDOJ 1034 模拟 水
查看>>
软件项目管理课感想
查看>>
【转载】APK反破解之四:Android代码动态加载技术
查看>>
(转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
查看>>
vsftp配置大全---超完整版
查看>>
继:我朝特有需求之--英文字符占 0.5 个,中文字符占 1 个
查看>>
关于 Overtrue 的拼音库 overtrue/pinyin 为何 travis 为 error
查看>>
ASP.NET Word/Excel 权限问题
查看>>
IOS 3D UI --- CALayer的transform扩展
查看>>
img绝对定位在div中间,img上下稍微移动问题
查看>>
前序遍历构造已知二叉树(二叉链表实现)(Java)
查看>>
查看CentOS版本
查看>>
关于VS 中 HttpHandler 的设置 500.23
查看>>
19.04.27--作业 打字游戏
查看>>