Day65:POJ1144-Network-求割点-模板题
题目链接:POJ - 1144
求割点的模板题

1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 8 const int N=10010; 9 int dfn[N],low[N],f[N],n,cnt; 10 bool book[N];//是否是割点 11 vector<int>v[N]; 12 13 void init() 14 { 15 for(int i=0; i<N; i++) 16 v[i].clear(); 17 cnt=0; 18 memset(low,0,sizeof(low)); 19 memset(dfn,0,sizeof(dfn)); 20 memset(f,0,sizeof(f)); 21 memset(book,0,sizeof(book)); 22 } 23 24 void Tarjan(int u,int fa) 25 { 26 dfn[u]=low[u]=++cnt; 27 f[u]=fa; 28 for(int i=0; i<v[u].size(); i++) 29 { 30 int x=v[u][i]; 31 if(dfn[x]==0) 32 { 33 Tarjan(x,u); 34 low[u]=min(low[x],low[u]); 35 } 36 else if(fa!=x) 37 low[u]=min(dfn[x],low[u]); 38 } 39 } 40 41 int main() 42 { 43 while(~scanf("%d",&n)&&n) 44 { 45 init(); 46 int x,y; 47 while(~scanf("%d",&x)&&x) 48 { 49 while(getchar()!='\n') 50 { 51 scanf("%d",&y); 52 v[x].push_back(y); 53 v[y].push_back(x); 54 } 55 } 56 Tarjan(1,0); 57 int son=0;//统计根节点儿子的个数 58 for(int i=2; i<=n; i++) 59 { 60 x=f[i]; 61 if(x==1)//i的父亲是根节点 62 son++; 63 else if(dfn[x]<=low[i]) 64 book[x]=1; 65 } 66 int ans=0; 67 if(son>1) 68 ans++; 69 for(int i=2; i<=n; i++) 70 { 71 if(book[i]) 72 ans++; 73 } 74 printf("%d\n",ans); 75 } 76 return 0; 77 }
分类:
图论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」