poj 2186 强连通+缩点
2024-10-21 16:30:30
题意:有一群牛,求被所有牛都认可的牛的个数
每个连通分量建一个缩点,出度为零的缩点包含的点的个数即为要求值
如果有多个出度为零的,直接输出零,否则输出那唯一一个出度为零的缩点包含的点的个数
#include<stdio.h>
#include<string.h>
#define N 11000
int dfn[N],low[N],sta[N],visit[N],suo[N],ans,outdegree[N],top,num[N];
int head[N],yong,n,m;
struct node {
int v,next;
}bian[N*10];
void init() {
memset(sta,0,sizeof(sta));
ans=0;
memset(outdegree,0,sizeof(outdegree));
memset(suo,0,sizeof(suo));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(visit,0,sizeof(visit));yong=0;top=0;
memset(head,-1,sizeof(head));
memset(num,0,sizeof(num));
}
void addedge(int u,int v){
bian[yong].v=v;
bian[yong].next=head[u];
head[u]=yong++;
}
int Min(int u,int v) {
return u>v?v:u;
}
void tarjan(int u) {
visit[u]=1;
dfn[u]=++yong;
low[u]=yong;
sta[++top]=u;
int i,v;
for(i=head[u];i!=-1;i=bian[i].next) {
v=bian[i].v;
if(!dfn[v]) {
tarjan(v);
low[u]=Min(low[u],low[v]);
}
else
if(visit[v]==1)
low[u]=Min(low[u],dfn[v]); }
int coun=0;
if(dfn[u]==low[u]) {
ans++;
do{
v=sta[top--];
coun++;
visit[v]=2;
suo[v]=ans;//缩点
}while(v!=u);
num[ans]=coun;//记录缩点包含的点的个数
}
}
int main() {
int i,j,a,b;
while(scanf("%d%d",&n,&m)!=EOF) {
init();
while(m--) {
scanf("%d%d",&a,&b);
addedge(a,b);
}
ans=0;
yong=0;
for(i=1;i<=n;i++)
if(visit[i]!=2)
tarjan(i);
/* for(i=1;i<=n;i++)
printf("%d\n",suo[i]);*/
for(i=1;i<=n;i++)
for(j=head[i];j!=-1;j=bian[j].next)
if(suo[i]!=suo[bian[j].v])
outdegree[suo[i]]++;
yong=0;
for(i=1;i<=ans;i++)
if(outdegree[i]==0){
yong++;
j=i;
}
if(yong>1)
printf("0\n");
else
printf("%d\n",num[j]);
}
return 0;
}
最新文章
- jQueryMobile 网页在UC等游览器上无法正常显示或者是无法自适应设备大小,但在QQ游览器上能正常显示的解决方法
- NSClassFromString 和 遍历UIView获取她所在的UIViewController的tips
- DRY原则
- sublime text2 常用快捷键
- 注意!你的Thread.Abort方法真的让线程停止了吗?
- Java 最简单的计算器——使用Args参数
- Linux中Bash发现重大安全漏洞修改方法
- cisco通过控制口或者通过远程配置交换机
- 【贪心+中位数】【UVa 11300】 分金币
- veridata实验例(5)在更改主键列值,update操作将被分成两个语句
- noi 1.8 11图像旋转
- java并发 - 自底向上的原理分析
- VueJs(9)---vue-router(进阶1)
- vim打开退出命令
- RT-SA-2019-005 Cisco RV320 Command Injection Retrieval
- nginx 禁止恶意域名解析
- sqlserver为不同数据库建立不同访问权限的帐号
- Python2.7-bz2
- apk中添加第三方so文件
- 【转】实现Sqlite datediff日期时间相减的方法
热门文章
- hdu 1542(线段树+扫描线 求矩形相交面积)
- 历届试题 邮局(dfs+剪枝)
- 【JLOI 2014】 松鼠的新家
- iOS开发之KVC全解
- 97. ExtJS之EditorGridPanel afteredit属性
- jquery的ajax同步异步执行
- Kubernetes Port Forward 机制访问 pod
- ROS-URDF-Xacro
- Application windows are expected to have a root view controller at the end of application launch
- Hibernate_01_初体验