lightoj 1210 最少加边,使得图变成强联通
来源:互联网 发布:写文档的软件 编辑:程序博客网 时间:2024/04/27 23:44
把一个图变成强联通,首先进行缩点,把原来的图变成很多的DAG,然后把所有出度为零的点和入度为零的点一一连起来,就得到了一个最少加边的强联通分量
#include<stdio.h>#include<vector>#include<algorithm>#include<stack>#include<string.h>using namespace std;#define MS(x) memset(x,0,sizeof(x))stack<int> S;vector<int> G[23000];vector<int> C[23000];bool used[25000];int dfn[25000];int low[25000];int time=0;int nv,ne;int cmp[25000];int ncmp;bool instack[25000];int in[25000];int out[25000];int init(){while(!S.empty()) S.pop();MS(used);MS(low);for(int i=0;i<25000;i++)dfn[i]=-1;time=0;ncmp=0;MS(cmp);MS(G);MS(C);MS(instack);MS(in);MS(out);}void tarjan(int n){dfn[n]=low[n]=time++;S.push(n);instack[n]=1;for(int i=0;i<G[n].size();i++){int v=G[n][i];if(dfn[v]==-1){tarjan(v);low[n]=min(low[n],low[v]);}else if(instack[v]){low[n]=min(low[n],dfn[v]);}}if(dfn[n]==low[n]){int v;do{v=S.top();S.pop();instack[v]=false;cmp[v]=ncmp;}while(v!=n);ncmp++;}}int main(){int cas;scanf("%d",&cas);for(int T=1;T<=cas;T++){init();scanf("%d%d",&nv,&ne);for(int i=0;i<ne;i++){int f,t;scanf("%d%d",&f,&t);f--;t--;G[f].push_back(t);}for(int i=0;i<nv;i++)if(dfn[i]==-1)tarjan(i);printf("Case %d: ",T);//printf("ncmp:%d\n",ncmp);if(ncmp==1){puts("0");continue;}for(int i=0;i<nv;i++){for(int j=0;j<G[i].size();j++){int v=G[i][j];int cn=cmp[i];int cv=cmp[v];if(cn!=cv)C[cn].push_back(cv);}}int ans=0;for(int i=0;i<ncmp;i++){out[i]=C[i].size();for(int j=0;j<C[i].size();j++){int v=C[i][j];in[v]++;}}int in0=0;int out0=0;for(int i=0;i<ncmp;i++){if(in[i]==0)in0++;if(out[i]==0)out0++;}printf("%d\n",max(in0,out0));}return 0;}
- lightoj 1210 最少加边,使得图变成强联通
- loj 1210 (求最少的加边数使得图变成强连通)
- 加最少边使得DAG图变为一个强连通图
- 计蒜客 商业信息共享 (tarjan,加最少的边构成强联通图)
- Proving Equivalences 判断至少加几个边可以变成强联通图+很好的模板
- POJ 1236 添加最少的边使图变成强联通
- cf22E(加最少的边形成强连通图)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛F题Islands(有向图加最少的边变成强连通图)
- lightoj 1168 tarjan 强联通分量加缩点 加各种题目坑
- CodeForces 22E Scheme【变成强联通图至少增加多少边并输出】
- CSU 1355地雷清除计划 网格图清除最少的地雷使得对角联通 最小割
- POJ-1236(有向图强连通分量 + 缩点 + 加边使得整个图强连通)
- lightoj 1003 强联通模板题
- hdu2767 Proving Equivalences (加边成为强联通分量)
- poj3352 Road Construction(加最少边使图双联通)
- POJ 1236--Network of Schools【scc缩点构图 && 求scc入度为0的个数 && 求最少加几条边使图变成强联通】
- poj1236——Network of Schools(加最少边组成强连通分量)
- 图的强联通分量
- 解决转换flash的SWF到视频文件没有声音的问题
- 专业程序员必知必会技巧:驯服复杂代码
- 什么时候加上android.intent.category.DEFAULT
- Qt宏之Q_UNUSED
- mac下cocos2d-x配置android环境
- lightoj 1210 最少加边,使得图变成强联通
- oc一些基本语法1
- Linux中系统服务/守护进程 (daemon) 的详细说明
- [Unity for android]Unity在安卓机上调试的测试环境搭建
- css+div 小三角tip小提示
- 对话框中有EditText如何一弹就出现软键盘
- Buy Tickets
- 后缀名
- 【Oracle】Oracle数据字典