UVA 11504 Dominos 强连通分量
找出强连通分量,缩点后统计入度为0的结点数。
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<sstream> #include<cmath> #include<climits> #include<string> #include<map> #include<queue> #include<vector> #include<stack> #include<set> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; #define pb(a) push(a) #define INF 0x1f1f1f1f #define lson idx<<1,l,mid #define rson idx<<1|1,mid+1,r #define PI 3.1415926535898 template<class T> T min(const T& a,const T& b,const T& c) {return min(min(a,b),min(a,c)); } template<class T> T max(const T& a,const T& b,const T& c) {return max(max(a,b),max(a,c)); } void debug() { #ifdef ONLINE_JUDGE #elsefreopen("d:\\in1.txt","r",stdin);freopen("d:\\out1.txt","w",stdout); #endif } int getch() {int ch;while((ch=getchar())!=EOF) {if(ch!=' '&&ch!='\n')return ch;}return EOF; } const int maxn=111222; int pre[maxn],lowlink[maxn],sccno[maxn],scc_cnt,dfs_clock; int deg[maxn]; vector<int> g[maxn]; stack<int> s;void dfs(int u) {lowlink[u]=pre[u]=++dfs_clock;s.push(u);for(int i=0;i<g[u].size();i++){int v=g[u][i];if(!pre[v]){dfs(v);lowlink[u]=min(lowlink[u],lowlink[v]);}else if(!sccno[v])lowlink[u]=min(lowlink[u],lowlink[v]);}if(lowlink[u]==pre[u]){scc_cnt++;while(1){int x=s.top();s.pop();sccno[x]=scc_cnt;if(x==u)break;}} }void find_scc(int n) {memset(pre,0,sizeof(pre));memset(sccno,0,sizeof(sccno));dfs_clock=scc_cnt=0;for(int i=1;i<=n;i++)if(!pre[i])dfs(i); }int main() {int t;scanf("%d",&t);for(int ca=1;ca<=t;ca++){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)g[i].clear();for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);g[u].push_back(v);}find_scc(n);memset(deg,0,sizeof(deg));for(int i=1;i<=n;i++){for(int j=0;j<g[i].size();j++){int u=i,v=g[i][j];if(sccno[u]!=sccno[v])deg[sccno[v]]=1;}}int num=0;for(int i=1;i<=scc_cnt;i++)if(!deg[i])num++;printf("%d\n",num);}return 0; }
View Code
转载于:https://www.cnblogs.com/BMan/p/3619318.html
UVA 11504 Dominos 强连通分量相关推荐
- The Largest Clique UVA - 11324( 强连通分量 + dp最长路)
这题 我刚开始想的是 缩点后 求出入度和出度为0 的点 然后统计个数 用总个数 减去 然而 这样是不可以的 画个图就明白了... 如果 减去度为0的点 那么最后如果出现这样的情况是不可 ...
- Uva 247 - Calling Circles(传递闭包 / 强连通分量)
题目链接 https://vjudge.net/problem/UVA-247 [题意] 如果两个人直接或间接互相打电话,则说明他们在同一个电话圈里.例如a打给b,b打给c,c打给d,d打给a,则这4 ...
- UVA 1324 The Largest Clique 最大团(强连通分量,变形)
题意:给一个有向图,要求找出一些点,使得这些点中的任意点对,要么可以互通,要么单向可达. 思路:最低只要求单向可达即可,即a->b都可以算进去. 强连通分量内的点肯定是满足要求的,可以全选,但是 ...
- 有向图的强连通分量,割点与桥
有向图的强连通分量 1.Tarjan /* Tarjan算法 复杂度O(N+M) */ #include<iostream> #include<stdio.h> #includ ...
- 【C++】强连通分量
强连通分量 先来一题例题 题目大意 怎么做? 分析 结论 不要高兴得太早 怎么办呢? 定义 缩点法 原图构建新图 发现 新的结论 强连通分量算法 Kosaraju算法 Tarjan算法 例题:信息传递 ...
- 极小连通子图和极大连通子图_强连通分量与拓扑排序
前言 由于GacUI里面开始多处用上拓扑排序,我决定把之前瞎JB搞出来的算法换掉,换成个正式的.之前我自己弄了个写起来很简单的算法,然后每一处需要用到的地方我就重新做一遍.当然这样肯定也是不行的,我觉 ...
- Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...
转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...
- HDU4635(强连通分量+Kosaraju算法)
题意:给出一个有向图,最多添加多少条边使这个图依然不是强连通图:当这个图是强连通图时,输出-1: 求解思路:强连通分量求解: 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图. ...
- poj3352(强连通分量)
题意:添加多少边才能使这个无向图为双连通分量. 注意:双连通分量适用于无向图:而强连通分量适用于有向图.但是这两个概念都是一样的. #include<iostream> #include& ...
最新文章
- 一月17日新生冬季练习赛解题报告B.函数问题
- linux awk命令使用示例
- 蓝桥杯java 算法训练 Torry的困惑(基本型)
- Python面试题总结(9)--高级特性
- spark整合MySQL
- mulitpartfile怎么接收不到值_光端机电源正常,但是运行不了怎么办?
- Qt在Mac系统下添加alias到IncludePath中
- 《Spring实战》第一章 — Spring之旅
- 如何自学python-小白是如何自学Python逆袭成功的?
- 探索未来|一文看懂小米年度技术峰会 · 软件技术专场
- 参加神州英才执行力培训课程感悟
- 详讯:微软宣布446亿美元收购雅虎
- windows驱动签名
- 网站被qq拦截应该怎么处理
- 【Developer Log】ProGuard扰码web项目(WAR)
- 浙江咪咕MGV3200_KLH_国科GK6323_2+8_免拆机卡刷固件包
- 【无标题】绝对定位的特点
- Linux信号量(3)-内核信号量
- 用Python自动生成数据日报!
- 大数据产业驱动智慧家庭发展
热门文章
- 研发解决方案介绍#Tracing(鹰眼)
- 详解收发不畅原因及U-Mail邮件中继解决之道
- iis7.5+.net4.5 报404错误
- 商品条形码(JBarcode)Java版(二)
- getOutputStream() has already been called for this response异常的原因和解决方法[转]
- jquery 验证email
- Linux 命令(107)—— systemctl 命令
- Framework7——基础工具类
- webpack2中postcss-loader报错noconfigfound
- 权限组件之录入获取登入用户的所有权限