UVALive-4287 Proving Equivalences 有向图的强连通分量+缩点
题意:有n个命题,已知其中的m个推导,要证明n个命题全部等价(等价具有传递性),最少还需要做出几次推导。
思路:由已知的推导可以建一张无向图,则问题变成了最少需要增加几条边能使图变成强连通图。找出所有的强连通分量,将每一个连通分量视作一个大节点,则整张图变成了一张DAG。设出度为0的大节点个数为b,入度为0的大节点个数为a,则答案就是max(a,b)。
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
#define clc(a,b) memset(a,b,sizeof(a))
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn = ;
const int inf=0x3f3f3f3f;
const double pi=acos(-);
int in[maxn],out[maxn];
vector<int>G[maxn];
int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;
stack<int>S; void dfs(int u)
{
pre[u]=lowlink[u]=++dfs_clock;
S.push(u);
for(int i=; 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],pre[v]);
}
}
if(lowlink[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=;
clc(sccno,);
clc(pre,);
for(int i=; i<n; i++)
if(!pre[i])
dfs(i);
} int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
G[i].clear();
for(int i=; i<m; i++)
{
int u,v;
scanf("%d%d",&u,&v);
u--;
v--;
G[u].push_back(v);
}
find_scc(n);
for(int i=; i<=scc_cnt; i++)
in[i]=out[i]=;
for(int u=; u<n; u++)
{
for(int i=; i<G[u].size(); i++)
{
int v=G[u][i];
if(sccno[u]!=sccno[v])
in[sccno[v]]=out[sccno[u]]=;
}
}
int a=,b=;
for(int i=; i<=scc_cnt; i++)
{
if(!in[i])
a++;
if(!out[i])
b++;
}
int ans=max(a,b);
if(scc_cnt==)
ans=;
printf("%d\n",ans);
}
return ;
}
UVALive-4287 Proving Equivalences 有向图的强连通分量+缩点的更多相关文章
- UVALive - 4287 - Proving Equivalences(强连通分量)
		
Problem UVALive - 4287 - Proving Equivalences Time Limit: 3000 mSec Problem Description Input Outp ...
 - UVALIVE 4287 Proving Equivalences (强连通分量+缩点)
		
题意:给定一个图,问至少加入多少条边能够使这个图强连通. 思路:首先求出这个图的强连通分量.然后把每个强连通分量缩成一个点.那么这个图变成了一个DAG,求出全部点的入度和出度,由于强连通图中每个节点的 ...
 - LA 4287 等价性证明(强连通分量缩点)
		
https://vjudge.net/problem/UVALive-4287 题意: 给出n个结点m条边的有向图,要求加尽量少的边,使得新图强连通. 思路:强连通分量缩点,然后统计缩点后的图的每个结 ...
 - UVALive - 4287 Proving Equivalences
		
给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图 ...
 - UVALive 4287 SCC-Tarjan  加边变成强连通分量
		
还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量 然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛... ...
 - UvaLive 4287 Proving Equivalences 强连通缩点
		
原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
 - UVALive 4287 Proving Equivalences(缩点)
		
等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件. 容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG. ...
 - 训练指南 UVALive - 4287 (强连通分量+缩点)
		
layout: post title: 训练指南 UVALive - 4287 (强连通分量+缩点) author: "luowentaoaa" catalog: true mat ...
 - HD2767Proving Equivalences(有向图强连通分量+缩点)
		
题目链接 题意:有n个节点的图,现在给出了m个边,问最小加多少边是的图是强连通的 分析:首先找到强连通分量,然后把每一个强连通分量缩成一个点,然后就得到了一个DAG.接下来,设有a个节点(每个节点对应 ...
 
随机推荐
- IE6下input标签border问题
			
IE6下input标签的border的样式border:none;是不起作用的!要设置border:0px;才行!
 - yii  YII小部件 创建登录表单表单    Login表单
			
YII框架必须遵循其表单的创建方法 登录模型错做与数据库操作模型是一致的,不同的是不跟数据库交互 ,用的是小部件,在创建表单之前,要在用户控制模块完成以下代码 protected --models - ...
 - (转载)使用ADOConnet.BeginTrans后,出现错误提示:无法在此会话中启动更多的事务?
			
Q: 三层结构,在服务器端使用adoconnection连接到sqlserver2000,然后想在 datasetprovider的beforupdaterecord中使用语句: try adocon ...
 - Linux下简易蜂鸣器驱动代码及测试实例
			
驱动代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ...
 - GPU CUDA常量内存使用
			
#include <cuda.h> #include <stdio.h> int getMulprocessorCount(){ cudaDeviceProp prop; cu ...
 - 一步步学习ASP.NET MVC3 (9)——JsonReslt,JavaScript,@Ajax
			
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们讲述了ActionResult的三个子类,非别是EmptyResult,RediretResult和Conte ...
 - P1631: [Usaco2007 Feb]Cow Party
			
还是水题,接近于裸的spfa(个人比较喜欢用spfa,dijkstra不太喜欢用),代码附上 ; type link=^node; node=record t,d:longint; f:link; e ...
 - SecureCRT+WinSCP 共用 key pub 密钥 转换 ppk 登录ssh
			
使用SecureCRT生成的密钥,无法在WinSCP使用, 使用puttygen.exe无法直接转换,解决办法 1.使用大于等于SecureCRT6.5版本,来转换 记得放入私钥,不是pub公钥.然后 ...
 - Win7下安装Mongodb教程
			
最新Mongodb下载地址:http://www.mongodb.org/downloads 1.下载完成后,解压到任意路径,如:D:\mongodb: 2.在D:\mongodb目录下 新建data ...
 - Android-AttributeSet详解
			
public interface AttributeSet { /** * Returns the number of attributes available in the set. * * @re ...