题文:https://vjudge.net/problem/UVA-12167

题解:
  很明显,先要缩点。然后画一下图就会发现是入度为0的点和出度为0的点取max。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <stack>
#define MAXN 50100
using namespace std;
struct edge{
int first;
int next;
int to;
}a[MAXN*];
int low[MAXN],dfn[MAXN],have[MAXN],fa[MAXN];
int in[MAXN],out[MAXN];
int num=,num1=,num2=,n,m;
stack<int> s; void cl(){
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(have,,sizeof(have));
memset(fa,,sizeof(fa));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(a,,sizeof(a));
num1=num2=num=;
} void addedge(int from,int to){
a[++num].to=to;
a[num].next=a[from].first;
a[from].first=num;
} void tarjian(int now){
low[now]=dfn[now]=++num1;
have[now]=;s.push(now);
for(int i=a[now].first;i;i=a[i].next){
int to=a[i].to;
if(!dfn[to]){
tarjian(to);
low[now]=min(low[now],low[to]);
}
else if(have[to]) low[now]=min(low[now],dfn[to]);
}
if(low[now]==dfn[now]){
int u=-;
num2++;
while(u!=now){
u=s.top();s.pop();
have[u]=;
fa[u]=num2;
}
}
} void make(){
for(int now=;now<=n;now++){
for(int i=a[now].first;i;i=a[i].next){
int to=a[i].to;
if(fa[now]!=fa[to]) out[fa[now]]++,in[fa[to]]++;
}
}
} int main()
{
int t;cin>>t;
while(t--){
cl();
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int x,y;scanf("%d%d",&x,&y);
addedge(x,y);
}
while(!s.empty()) s.pop();
for(int i=;i<=n;i++) if(!dfn[i]) tarjian(i);
make();
int x=,y=;
for(int i=;i<=num2;i++) if(in[i]==) x++;
for(int i=;i<=num2;i++) if(out[i]==) y++;
if(num2==) printf("0\n");
else printf("%d\n",max(x,y));
}
return ;
}

Proving Equivalences UVA - 12167的更多相关文章

  1. hdu 2767 Proving Equivalences

    Proving Equivalences 题意:输入一个有向图(强连通图就是定义在有向图上的),有n(1 ≤ n ≤ 20000)个节点和m(0 ≤ m ≤ 50000)条有向边:问添加几条边可使图变 ...

  2. hdoj 2767 Proving Equivalences【求scc&&缩点】【求最少添加多少条边使这个图成为一个scc】

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. Proving Equivalences(加多少边使其强联通)

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. UVALive - 4287 - Proving Equivalences(强连通分量)

    Problem   UVALive - 4287 - Proving Equivalences Time Limit: 3000 mSec Problem Description Input Outp ...

  5. HDU 2767 Proving Equivalences(至少增加多少条边使得有向图变成强连通图)

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. HDU 2767 Proving Equivalences (Tarjan)

    Proving Equivalences Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other ...

  7. UVA12167 Proving Equivalences

    UVA12167 Proving Equivalences 题意翻译 题目描述 在数学中,我们常常需要完成若干命题的等价性证明. 例如:有4个命题a,b,c,d,要证明他们是等价的,我们需要证明a&l ...

  8. HDU 2767 Proving Equivalences (强联通)

    pid=2767">http://acm.hdu.edu.cn/showproblem.php?pid=2767 Proving Equivalences Time Limit: 40 ...

  9. Proving Equivalences (hdu 2767 强联通缩点)

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. Storm 系列(一)—— Storm和流处理简介

    一.Storm 1.1 简介 Storm 是一个开源的分布式实时计算框架,可以以简单.可靠的方式进行大数据流的处理.通常用于实时分析,在线机器学习.持续计算.分布式 RPC.ETL 等场景.Storm ...

  2. Mybatis系列(一)入门

    Mybatis系列(一)入门 mybatis简介 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结 ...

  3. FreeSql 新手上路系列教程已发布在 cnblogs

    FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...

  4. jquery ajax到servlet出现中文乱码(utf-8编码下)

    个人遇到的该问题有两大类: 第一类很普遍,就是jsp页面编码没有规定,servlet中接收参数没有转码,response没有使用setContentType()和setCharacterEncodin ...

  5. Redis在新项目中的使用场景

    Redis在新项目中的使用场景 数据类型 使用场景 string 比如说,我想知道什么时候封锁一个Ip地址,Incrby命令(使用这个命令记录被访问的次数) Hash 存储用户的信息[id,name, ...

  6. python常用内建模块——datetime

    datetime是python处理日期和时间的标准库. 获取当前日期和时间 >>>from datetime import datetime >>>now = da ...

  7. 装系统 ---------- 了解 UEFI与Legacy、硬盘分区MBR和GPT

    UEFI:全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface),一种详细描述类型接口的标准.这种接口用于操作系统自动从预启动的操作环境,加载到一种 ...

  8. Java位运算符&、|、^、>>、<<、~、>>>

    如果要搞懂Java中的位运算符,首先要搞懂二进制的运算,之前一篇有介绍详细请看 二进制运算-十进制与二进制的转换 Java中的位运算符有:&(按位与).|(按位或).^(按位异或).>& ...

  9. wepy框架开发小程序遇到的node-sass问题解决方案

    一.报错图 二.解决方案 主要是windows平台缺少编译环境, 1.先运行: npm install -g node-gyp 2.然后运行cmd:(右键点击:以管理员身份运行) 输入:npm ins ...

  10. vue把链接转二维码

    使用qrcodejs2插件 1. 安装qrcodejs2:npm install qrcodejs2 --save 2. 在组件里面引入: import QRCode from 'qrcodejs2' ...