LA 4287 Proving Equivalences(tarjan+强连通缩点)
2015-06-26 12:51
495 查看
题意:n个命题,已经做了m次推导,问为了证明这n个命题全部等价,至少还需要几次推导。
分析:n个命题相当于n个顶点,m次推导相当于m条有向边。全部等价相当于图强连通。
求出图中的强连通分量,若只有一个,即图本身就是强连通,则无需推导,答案为0。
否则进行缩点,得到一个DAG图,分别统计该图中点的入度和出度总数a和b,答案就是max(a,b)。
分析:n个命题相当于n个顶点,m次推导相当于m条有向边。全部等价相当于图强连通。
求出图中的强连通分量,若只有一个,即图本身就是强连通,则无需推导,答案为0。
否则进行缩点,得到一个DAG图,分别统计该图中点的入度和出度总数a和b,答案就是max(a,b)。
#include<bits/stdc++.h> using namespace std; #define maxn 20005 vector<int> G[maxn]; int pre[maxn],low[maxn],sccno[maxn],dfs_clock,scc_cnt; stack<int> S; void dfs(int u){ pre[u]=low[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); low[u]=min(low[u],low[v]);//用后代的low函数更新自身 } else if(!sccno[v]){ low[u]=min(low[u],pre[v]);//用反向边更新 } } if(low[u]==pre[u]){ ++scc_cnt; for(;;){ int x=S.top();S.pop(); sccno[x]=scc_cnt; if(x==u) break; } } } void find_scc(int n){ dfs_clock=scc_cnt=0; memset(sccno,0,sizeof(sccno)); memset(pre,0,sizeof(pre)); for(int i=0;i<n;++i) if(!pre[i]) dfs(i); } int in[maxn],out[maxn]; int main() { int i,t,a,b,j,n,m; cin>>t; while(t--) { scanf("%d%d",&n,&m); for(i=0;i<n;++i) G[i].clear(); for(i=1;i<=m;++i){ scanf("%d%d",&a,&b); --a,--b; G[a].push_back(b); } find_scc(n); if(scc_cnt==1) {puts("0");continue;} for(i=1;i<=scc_cnt;++i) in[i]=out[i]=0; for(i=0;i<n;++i){ for(j=0;j<G[i].size();++j) { int v=G[i][j]; if(sccno[v]!=sccno[i]) out[sccno[i]]=in[sccno[v]]=1; } } a=b=0; for(i=1;i<=scc_cnt;++i) { if(!in[i])++a; if(!out[i]) ++b; } printf("%d\n",max(a,b)); } return 0; }
相关文章推荐
- iOS开发笔记22--使用XIB自定义一个UIView
- [SoapUI] 循环遍历某个Test Case下的所有Test Step,将Cookie传递给这些Test Step
- CCUI.ListView创建以及用法
- [SoapUI] 按照 Test Step Type 获取所有满足条件的 Test Step
- arduino rgb 3色灯
- UIButton 如何设置字体颜色
- 图解MBR分区无损转换GPT分区+UEFI引导安装WIN8.1
- 图解MBR分区无损转换GPT分区+UEFI引导安装WIN8.1
- 图解MBR分区无损转换GPT分区+UEFI引导安装WIN8.1
- 图解MBR分区无损转换GPT分区+UEFI引导安装WIN8.1 分类: Windows-嵌入式 生活百科 2015-06-26 11:57 475人阅读 评论(2) 收藏
- UIView及其子类围绕任意点旋转的方法
- UIKit:UITextField属性解析
- 【Android UI设计与开发】第13期:顶部标题栏(四)自定义ActionBar风格和样式
- Build生成者模型
- 【Android UI设计与开发】第12期:顶部标题栏(三)ActionBar实现层级导航的返回效果
- ios学习笔记:tableviewcell中ui设置frame问题
- SPOJ - DQUERY 【主席树】
- S5PV210开发系列四_uCGUI的移植
- [XCode] XCode 中设置 UI 部件的 z-order
- Windows 10 build 10149手机版上手多图欣赏