UVA 12167 加最少的边让其变为连通图
来源:互联网 发布:c语言中ab转成 0xab 编辑:程序博客网 时间:2024/05/15 05:59
ejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=3319&mosmsg=Submission+received+with+ID+13628687
Consider the following exercise, found in a generic linear algebra textbook.
Let A be an n × n matrix. Prove that the following statements are equivalent:
- A is invertible.
- Ax = b has exactly one solution for every n × 1 matrix b.
- Ax = b is consistent for every n × 1 matrix b.
- Ax = 0 has only the trivial solution x = 0.
The typical way to solve such an exercise is to show a series of implications. For instance, one can proceed by showing that (a) implies (b), that (b) implies (c), that (c) implies (d), and finally that (d) implies (a). These four implications show that the four statements are equivalent.
Another way would be to show that (a) is equivalent to (b) (by proving that (a) implies (b) and that (b) implies (a)), that (b) is equivalent to (c), and that (c) is equivalent to (d). However, this way requires proving six implications, which is clearly a lot more work than just proving four implications!
I have been given some similar tasks, and have already started proving some implications. Now I wonder, how many more implications do I have to prove? Can you help me determine this?
Input
On the first line one positive number: the number of testcases, at most 100. After that per testcase:- One line containing two integers n (1 ≤ n ≤ 20000) and m (0 ≤ m ≤ 50000): the number of statements and the number of implications that have already been proved.
- m lines with two integers s1 and s2 (1 ≤ s1, s2 ≤ n and s1 ≠ s2) each, indicating that it has been proved that statement s1 implies statement s2.
Output
Per testcase:- One line with the minimum number of additional implications that need to be proved in order to prove that all statements are equivalent.
Sample Input
24 03 21 21 3
Sample Output
42
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int N=100005;int head[N],ip,in[N],out[N],stack[N],ins[N],index,dfn[N],low[N],ee[N][2],belong[N];int cnt_tar,top,m,n;struct note{ int to; int next;}edge[N];void add(int u,int v){ edge[ip].to=v; edge[ip].next=head[u]; head[u]=ip++;}void tarjan(int u){ int j,i,v; dfn[u]=low[u]=++index; stack[++top]=u; ins[u]=1; for(i=head[u]; i!=-1; i=edge[i].next) { v=edge[i].to; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(ins[v]) low[u]=min(low[u],dfn[v]); } if(dfn[u]==low[u]) { cnt_tar++; do { j=stack[top--]; ins[j]=0; belong[j]=cnt_tar; } while(j!=u); }}void solve(){ int i; top=0,index=0,cnt_tar=0; memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); for(i=1; i<=n; i++) { if(!dfn[i]) { tarjan(i); } }}int main(){ int T; scanf("%d",&T); while(T--) { memset(head,-1,sizeof(head)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) { scanf("%d%d",&ee[i][0],&ee[i][1]); add(ee[i][0],ee[i][1]); } solve(); for(int i=1; i<=m; i++) { int xx=belong[ee[i][0]],yy=belong[ee[i][1]]; if(xx!=yy) { in[yy]++; out[xx]++; } } int innum=0,outnum=0; for(int i=1; i<=cnt_tar; i++) { if(in[i]==0) innum++; if(out[i]==0) outnum++; } printf("%d\n",max(innum,outnum)); } return 0;}
- UVA 12167 加最少的边让其变为连通图
- 加最少边使得DAG图变为一个强连通图
- cf22E(加最少的边形成强连通图)
- 增加最少的边使有向图变为强连通图
- CF22E 加最少的边使原有向图边成强连通图
- CF22E 加最少的边使原有向图边成强连通图
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛F题Islands(有向图加最少的边变成强连通图)
- Summer Holiday 【有向图中连通最少的点来使其整个图 连通的】+【tarjan求SCC +缩点】
- poj1236——Network of Schools(加最少边组成强连通分量)
- hdu 5934 强连通 && 判断覆盖图的最少点
- 计蒜客 商业信息共享 (tarjan,加最少的边构成强联通图)
- poj 3177 Redundant Paths(求最少加几条边将图变为边双连通图)
- lightoj 1210 最少加边,使得图变成强联通
- 使序列变为有序的最少交换次数
- hdu 5713 图去多少条边变为指定连通块 dp ...
- 无向图边连通分量(加边使其成为边连通分量)poj3352
- UVA 11384 最少操作使数列变为零 (找规律)
- HDU 4313 Matrix(并查集/破坏边使得k个点两两不连通的最少代价)
- javascript代码优化杂谈
- 进程和线程的区别
- 访问服务器指向本地
- vim中的align插件
- 关于CGI的一些认识
- UVA 12167 加最少的边让其变为连通图
- Java异常
- C++ 模版用法和注意事项
- JQUERY树型插件ZTREE小例子
- oracle 一张表一个字段用逗号隔开,另一张表中的一个字段要匹配
- 关于HLK-RM04模块的几个实用心得
- UVa 11275 3D Triangles 空间三角形
- js中判断2个div是否有交集
- Leetcode 树 Binary Tree Zigzag Level Order Traversal