【 UVALive - 4287】Proving Equivalences (SCC缩点)
题意:
给出N个命题,要求你证明这N个命题的等价性
比如有4个命题a,b,c,d,我们证明a<->b, b<->c,c<->d,每次证明都是双向的,因此一共用了6次推导
如果换成证明a->b,b->c,c->d,d->a,每次证明都是单向的,而只需4次就可以证明所有命题的等价性
现在给出M个命题证明,问还需要证明几个,才可以保证N个命题等价。
分析:
缩点后求DAG中入度为0和出度为0的联通块的较大值。
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define Maxn 20010
#define Maxm 50010 int first[Maxn],dfn[Maxn],low[Maxn],sta[Maxn],scc[Maxn];
bool ru[Maxn],chu[Maxn];
int cnt,sl,cl; struct node
{
int x,y,next;
}t[Maxm]; int mymin(int x,int y) {return x<y?x:y;}
int mymax(int x,int y) {return x>y?x:y;} void ffind(int x)
{
dfn[x]=low[x]=++cnt;
sta[++sl]=x;
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
if(dfn[y]==)
{
ffind(y);
low[x]=mymin(low[x],low[y]);
}
else if(scc[y]==) low[x]=mymin(low[x],dfn[y]);
}
if(low[x]==dfn[x])
{
cl++;
while()
{
int z=sta[sl--];
scc[z]=cl;
if(z==x) break;
}
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i,n,m,r=,c=;
scanf("%d%d",&n,&m);
memset(first,,sizeof(first));
memset(dfn,,sizeof(dfn));
memset(scc,,sizeof(scc));
cnt=;sl=;cl=;
for(i=;i<=m;i++)
{
scanf("%d%d",&t[i].x,&t[i].y);
t[i].next=first[t[i].x];first[t[i].x]=i;
}
for(i=;i<=n;i++) if(dfn[i]==) ffind(i);
memset(ru,,sizeof(ru));
memset(chu,,sizeof(chu));
for(i=;i<=m;i++) if(scc[t[i].x]!=scc[t[i].y])
chu[scc[t[i].x]]=,ru[scc[t[i].y]]=;
for(i=;i<=cl;i++) r+=ru[i],c+=chu[i];
if(cl==) printf("0\n");
else printf("%d\n",mymax(r,c));
}
return ;
}
[LA4287]
2016-03-17 16:46:42
【 UVALive - 4287】Proving Equivalences (SCC缩点)的更多相关文章
- UVALive 4287 Proving Equivalences(缩点)
等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件. 容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG. ...
- UvaLive 4287 Proving Equivalences 强连通缩点
原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- UVALive - 4287 - Proving Equivalences(强连通分量)
Problem UVALive - 4287 - Proving Equivalences Time Limit: 3000 mSec Problem Description Input Outp ...
- UVALIVE 4287 Proving Equivalences (强连通分量+缩点)
题意:给定一个图,问至少加入多少条边能够使这个图强连通. 思路:首先求出这个图的强连通分量.然后把每个强连通分量缩成一个点.那么这个图变成了一个DAG,求出全部点的入度和出度,由于强连通图中每个节点的 ...
- UVALive - 4287 Proving Equivalences
给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图 ...
- 训练指南 UVALive - 4287 (强连通分量+缩点)
layout: post title: 训练指南 UVALive - 4287 (强连通分量+缩点) author: "luowentaoaa" catalog: true mat ...
- hdu2767 Proving Equivalences Tarjan缩点
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...
- UVALive 4287 Proving Equivalence (强连通分量)
把证明的关系看出一张图,最终就是要所有的点都在至少一个环中.环的判断和度数有关. 用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a, 出度为0的b,取 ...
- hdoj 2767 Proving Equivalences【求scc&&缩点】【求最少添加多少条边使这个图成为一个scc】
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
随机推荐
- LabVIEW系列——生产现场故障邮件通知
第一步.建立邮件服务器,winmail做邮件服务器是个不错的选择.不过在使用前需要注册. 第二步.创建修改域名.这里创建的域名不是真正的域名,只能用于局域网内.假设:lhy.com.cn 第三步.创建 ...
- Apache Kafka: Next Generation Distributed Messaging System---reference
Introduction Apache Kafka is a distributed publish-subscribe messaging system. It was originally dev ...
- magic_quotes_runtime(魔术引号开关)
我们可以通过以下代码来探测php环境中magic_quotes_runtime是否开启: magic_runtime.php 源代码如下: <?php //当magic_quotes_runti ...
- ASP.NET操作DataTable
.创建 datatable DataTable dt=new Datable();//可以给表创建一个名字,tb .给表加个列名: dt.Columns.Add("id", typ ...
- C语言基础知识小总结(2)
上个总结比较笼统,下面写的稍微详细点吧算是. 一.控制台屏幕打印 1.putchar(); 格式: void putchar(char c); //直接把一个字符输出到屏幕上 2.print ...
- Android开发手记(18) 数据存储三 SQLite存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...
- Java文件操作二:File文件的方法
一.文件的判断方法 判断方法 .boolean canExecute()判断文件是否可执行 .boolean canRead()判断文件是否可读 .boolean canWrite() 判断文件是否可 ...
- [uiview animation ...] 这个函数有多少没有认识的可能!翻盘效果 上下左右怎么翻都不怕
1.自己还想着怎么3d 变形 让一个视图绕x/y 轴线翻转 就这么一句代码 [UIView transitionWithView:self.startButton duration:0.5 op ...
- mac管理员密码破解
方法一:官方解决方法.找出电脑原配的系统盘,找不到就借一张或者刻录一张,重启电脑,启动的时候按C键,选好语言后进入安装的时候,点击“常用工具”,里面有一项是“重设密码”,这时就可以重新设定Mac OS ...
- html-----003
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...