博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1523:SPF——题解
阅读量:7080 次
发布时间:2019-06-28

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

这题明显就是求割点然后求割完之后的强连通分量的个数。

割点都会求,怎么求割完的分量个数呢?

我们可以通过万能的并查集啊!(具体做法看代码吧,方法不好叙述)

这样我们查割点它所连的点一共隶属于几个集合即可。

(PS:读入方式很恶心,同时请注意快速读入)

#include
#include
#include
#include
#include
using namespace std;typedef long long ll;inline int read(){ int x=0,w=1;char ch=0; while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*w;}const int maxn=1001;bool dis[maxn][maxn];bool cut[20001];int dfn[maxn];int low[maxn];int fa[maxn];int from[maxn];int t;int big[maxn];int to[maxn];int find(int a){ if(a==fa[a])return a; return fa[a]=find(fa[a]);}void tarjan(int u,int f){ bool tong[maxn]={
0}; from[u]=f; t++; dfn[u]=t; low[u]=t; to[t]=u; for(int v=1;v<=maxn;v++){ if(dis[u][v]){ if(!dfn[v]){ tarjan(v,u); low[u]=min(low[u],low[v]); }else if(f!=v){ low[u]=min(low[u],dfn[v]); } } fa[find(u)]=find(to[low[u]]); } for(int v=1;v<=maxn;v++){ if(dis[u][v]){ if(!tong[find(v)]){ tong[find(v)]=1; big[u]++; } } } return;}int main(){ int u,v; int cnt=0; bool smg=0; while(233){ int u=read(); if(!u&&!smg)break; smg=1; if(!u){ for(int i=1;i<=maxn;i++)fa[i]=i; tarjan(1,0); int rootson=0; bool ok=0; for(int i=2;i<=maxn;i++){ int v=from[i]; if(v==1)rootson++; else{ if(low[i]>=dfn[v]&&low[i]&&dfn[i]){ cut[v]=1; ok=1; } } } if(rootson>=2){ cut[1]=1; ok=1; } cnt++; printf("Network #%d\n",cnt); if(ok==0){ printf(" No SPF nodes\n"); }else{ for(int i=1;i<=maxn;i++){ if(cut[i])printf(" SPF node %d leaves %d subnets\n",i,big[i]); } } printf("\n"); memset(cut,0,sizeof(cut)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(fa,0,sizeof(fa)); memset(from,0,sizeof(from)); memset(dis,0,sizeof(dis)); memset(big,0,sizeof(big)); memset(to,0,sizeof(to)); t=0; smg=0; continue; } int v=read(); dis[u][v]=dis[v][u]=1; } return 0;}

 

转载于:https://www.cnblogs.com/luyouqi233/p/7845890.html

你可能感兴趣的文章
jQuery 事件 - trigger() 方法
查看>>
模态窗口被IE 7给糟蹋得不成样子了
查看>>
你不知道的Spring配置文件
查看>>
Spark源码分析之Spark-submit和Spark-class
查看>>
SOA系列之基本特性
查看>>
js中的"=="和equals()以及is()三者的区别
查看>>
谨慎注意WebBrowser控件的DocumentCompleted事件
查看>>
回头再说 005 --温暖的文字和音乐
查看>>
C#进行Visio二次开发之电气线路停电分析逻辑
查看>>
简便无刷新文件上传系统
查看>>
[链接]实现GEF程序中的剪切/复制/粘贴功能
查看>>
lucene 的评分机制
查看>>
Backup Volume 操作 - 每天5分钟玩转 OpenStack(59)
查看>>
JavaWeb之tomcat安装、配置与使用(一)
查看>>
SpringMVC Controller 返回值的可选类型
查看>>
kbmmw 5.03 发布
查看>>
iOS - App 与外设间的通信方式
查看>>
13.7. Device Management
查看>>
144.2. tcpdump - A powerful tool for network monitoring and data acquisition
查看>>
查看ecshop广告位对应的广告详细信息
查看>>