UVALive 4287 Proving Equivalence (强连通分量)
把证明的关系看出一张图,最终就是要所有的点都在至少一个环中。环的判断和度数有关。
用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a,
出度为0的b,取其中大的一个。特判强连通分量数为1的情况。
看懂tarjan算法以后还是比较简单的
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn = 2e4+;
- const int maxm = 5e4+;
- int head[maxn],nxt[maxm],to[maxm],ecnt;
- void addEdge(int u,int v)
- {
- nxt[ecnt] = head[u];
- to[ecnt] = v;
- head[u] = ecnt++;
- }
- void initGraph(int n)
- {
- memset(head,-,sizeof(int)*(n+)); ecnt = ;
- }
- int sccno[maxn],pre[maxn],low[maxn],dfs_clock,scc_cnt;
- stack<int> stk;
- void tarjan(int u)
- {
- pre[u] = low[u] = ++dfs_clock;
- stk.push(u);
- for(int i = head[u]; ~i; i = nxt[i]){
- int v = to[i];
- if(!pre[v]){
- tarjan(v);
- low[u] = min(low[u],low[v]);
- }else if(!sccno[v]){
- low[u] = min(low[u],pre[v]);
- }
- }
- if(low[u] == pre[u]){
- scc_cnt++;
- while(stk.size()){
- int x = stk.top(); stk.pop();
- sccno[x] = scc_cnt;
- if(x == u) break;
- }
- }
- }
- void find_scc(int n)
- {
- memset(pre,,sizeof(int)*(n+));
- memset(sccno,,sizeof(int)*(n+));
- scc_cnt = dfs_clock = ;
- for(int i = ; i < n; i++){
- if(!pre[i]) tarjan(i);
- }
- }
- int ind[maxn],outd[maxn];
- int main()
- {
- //freopen("in.txt","r",stdin);
- int T; scanf("%d",&T);
- while(T--){
- int n,m; scanf("%d%d",&n,&m);
- initGraph(n);
- for(int i = ; i < m; i++){
- int u,v; scanf("%d%d",&u,&v);
- addEdge(u-,v-);
- }
- find_scc(n);
- if(scc_cnt == ) {
- printf("0\n"); continue;
- }
- for(int i = ; i <= scc_cnt; i++) ind[i] = outd[i] = ;
- for(int u = ; u < n; u++){
- for(int i = head[u]; ~i; i = nxt[i]){
- int v = to[i];
- if(sccno[u] != sccno[v]) outd[sccno[u]]++,ind[sccno[v]]++;
- }
- }
- int a = ,b = ;
- for(int i = ; i <= scc_cnt; i++){
- if(!outd[i]) b++;
- if(!ind[i]) a++;
- }
- printf("%d\n",max(a,b));
- }
- return ;
- }
UVALive 4287 Proving Equivalence (强连通分量)的更多相关文章
- 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 Proving Equivalences (强连通分量,常规)
题意: 给一个有向图,问添加几条边可以使其强连通. 思路: tarjan算法求强连通分量,然后缩点求各个强连通分量的出入度,答案是max(入度为0的缩点个数,出度为0的缩点个数). #include ...
- UVALive - 4287 Proving Equivalences
给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图 ...
- UVALive 4287 Proving Equivalences(缩点)
等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件. 容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG. ...
- Proving Equivalences UVALive - 4287(强连通分量 水题)
就是统计入度为0 的点 和 出度为0 的点 输出 大的那一个,, 若图中只有一个强连通分量 则输出0即可 和https://www.cnblogs.com/WTSRUVF/p/9301096.htm ...
- 训练指南 UVALive - 4287 (强连通分量+缩点)
layout: post title: 训练指南 UVALive - 4287 (强连通分量+缩点) author: "luowentaoaa" catalog: true mat ...
- UVALive 4287 SCC-Tarjan 加边变成强连通分量
还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量 然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛... ...
随机推荐
- PHP实用小程序(六)
<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio ...
- 天天连萌UE分析
1.开始游戏消耗心,有消耗动画,[可以使用到副本次数上] 2.关卡结束,是个可爱的动画,[可以是潇洒的动画,一个吹箫的潇洒老翁或者帅哥] 3.点击爽快感:点击配对成功飘字及时且快速,[字体漂亮--潇洒 ...
- 网络编程-http连接-GET&POST
GetRequest package com.net.http; import java.io.BufferedReader; import java.io.IOException; import j ...
- 简单安装与使用composer
1.下载composer.exe工具,然后进行安装 这一步需要找到你使用的php版本文件 2.windows+r cmd 输入composer 安装中国镜像,提高使用效率 https://p ...
- hdu1847(sg函数&yy)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847 题意:中文题诶- 思路:直接sg函数打表即可,观察打表的结果发现是有规律的,sg函数的值只为0, ...
- subsets(2018.10.16)
一句话题意:给你一个包含n个元素的集合,问有多少个非空子集,能划分成和相等的两份.(n<=20) 题解:对于这道题,我们很轻易可以列出\(O(3^n)\)的暴力,这是显然过不了的,观察这道题的性 ...
- D. Merge Equals(from Educational Codeforces Round 42 (Rated for Div. 2))
模拟题,运用强大的stl. #include <iostream> #include <map> #include <algorithm> #include < ...
- stringstream转换
在这之前,在杭电刷题的时候,并没有注意到这个好东西. 使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高 ...
- 关于maven项目导入后缺jar包问题的处理方法
1.maven项目的好处:方便,我们在把自己写好的代码发送给目标人物时可以精简代码——把target目录,一些设置目录之类的都删除掉,接下来要做的就是尽可能的只留下一个src文件夹及pom.xml文件 ...
- FMDB存储模型对象(以二进制存储)用NSKeyedArchiver archivedDataWithRootObject序列号,NSKeyedUnarchiver unarchiveObjectWithData反序列化(重点坑是sql语句@"insert into t_newsWithChannel (nwesName,newsType) values (?,?)")一定要用占位符
交友:微信号 dwjluck2013 一.封装FMDB单例 (1)JLFMDBHelp.h文件 #import <Foundation/Foundation.h> #import < ...