【 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 ...
随机推荐
- js验证邮箱
<html> <head> <script> function verifyAddress(obj) { var email = obj ...
- hdu2047.java递推题
阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- Android 高级UI设计笔记01:使用ExpandableListView组件(ListView的扩展)
1.ExpandableListView是一个用来显示二级节点的ListView. 比如如下效果的界面: 2.使用ExpandableListView步骤 (1)要给ExpandableListVie ...
- jQuery 分页插件 jqPagination的使用
jqPagination 是一个简单易用的轻量级 jQuery分页插件,其使用了 HTML5 和 CSS3 技术来实现.此插件提供了几个参数设置选项,通过简单的配置即可生成分页控件.此外,它的外观样式 ...
- CSS伪类选择器和伪元素选择器
CSS的伪类选择器常用的是link/visited/hover/active,分别对应未访问.已访问过.鼠标悬停.鼠标按下时的样式,常用于链接,使用时要按此顺序依次写CSS,不能乱 a:link{ba ...
- (转)php连接mysql如何判断数据为空?
<?php$result_a=mysql_query("select * from product_tag where product_id=$row[id]");$num ...
- 自动化构建jenkins配置
1.安装jdk7+tomcat7 2.下载msi安装文件(我是win7上安装,下载地址 http://Jenkins-ci.org/),文件安装路径选择\tomcat\webapps. 3.安装成功之 ...
- MongoDB的Document操作
简介 一.Document数据插入 二.Document数据删除 三.Document数据更新 一.Document数据插入 1.插入文档 db.[文档名].insert({BSON数据}) 2.批量 ...
- C# -abstract, override, virtual, new
new声明的方法,当使用子类的类型来调用的时候,它会运行子类的函数,而如果类型是基类的话,被隐藏的基类函数会被调用. 而子类中函数使用override的时候,则当使用子类的类型来调用的是,它会运行子 ...
- 【html】【0】开始的序言
人生总得做点什么才显得有意义,在牛逼的梦想也抵挡不住你傻逼似的坚持! 1>本系列适用于没有任何计算机语言基础的小白入门级教程 2>为了我喜欢的一个女生小娜娜 3>为自己系统的学习ht ...