UVA 11770 — Lighting Away 强连通+拓扑
2015-05-04 19:53
267 查看
题意:有n盏灯,m个关联;
a点亮了b必定点亮;
问至少要开几盏灯才能使所有的灯点亮;
思路:用强连通缩点,然后拓扑求入度为0得点;
a点亮了b必定点亮;
问至少要开几盏灯才能使所有的灯点亮;
思路:用强连通缩点,然后拓扑求入度为0得点;
#include<stdio.h> #include<vector> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int N = 10005; int head , vis ; int DFN , low , belong , stack ; int n, m, edgenum; int top, Time, taj; struct node { int from, to, nex; bool sign; }edge[100005]; void add(int u, int v) { edge[edgenum].from = u; edge[edgenum].to = v; edge[edgenum].sign = false; edge[edgenum].nex = head[u]; head[u] = edgenum++; } vector<int>bcc ; void tarjan(int u, int fa) { DFN[u] = low[u] = Time++; vis[u] = 1; stack[top++] = u; for(int i = head[u];i!=-1;i = edge[i].nex) { int v = edge[i].to; if(DFN[v] == -1) { tarjan(v, u); low[u] = min(low[u], low[v]); if(DFN[u]<low[v]) edge[i].sign = 1; } else if(vis[v]) low[u] = min(low[u], DFN[v]); } if(low[u] == DFN[u]) { taj ++ ; bcc[taj].clear(); while(1) { int now = stack[--top]; vis[now] = 0; belong[now] = taj; bcc[taj].push_back(now); if(now == u) break; } } } vector<int>G ; int du ; void suodian() { memset(du, 0, sizeof(du)); for(int i = 1;i<=taj;i++) G[i].clear(); for(int i = 0;i<edgenum;i++) { int u = belong[edge[i].from]; int v = belong[edge[i].to]; if(u!=v) { G[u].push_back(v); du[v]++; } } } void tarjan_init(int all) { memset(DFN, -1, sizeof(DFN)); memset(low, -1, sizeof(low)); memset(vis, 0, sizeof(vis)); Time = top = taj = 0; for(int i = 1;i<=all;i++) { if(DFN[i] == -1) tarjan(i, i); } } int main() { int cas; int t = 0; scanf("%d", &cas); while(cas--) { memset(head, -1, sizeof(head)); edgenum = 0; scanf("%d%d", &n, &m); while(m--) { int u, v; scanf("%d%d", &u, &v); add(u, v); } tarjan_init(n); suodian(); int con = 0; for(int i = 1;i<=taj;i++) { if(du[i] == 0) con++; } printf("Case %d: %d\n", ++t, con); } return 0; }
相关文章推荐
- UVA 11770 Lighting Away 强连通缩点+拓扑排序
- UVa11770 - Lighting Away(排序+DFS)
- UVA11770 - Lighting Away
- UVA - 11838 Come and Go && UVA - 11770 Lighting Away (强连通分量)
- uva10305--拓扑
- UVA 11324 The Largest Clique(tarjan有向图强连通+缩点)
- UVA 11324 The Largest Clique(强连通缩点+记忆化搜索)
- uva 1108 - Mining Your Own Business(强连通)
- uva 11324 - The Largest Clique(强联通图+拓扑)
- uva 12167(强连通分支)
- UVA 11770 Lighting Away
- POJ 2762 Going from u to v or from v to u?(强连通+拓扑)
- UVA 11770 Lighting Away
- UVALive 6953 Digi Comp II(拓扑)
- UVA LIVE 5053 World Cup Nominations--有向图强连通
- UVA - 11324 The Largest Clique 强连通缩点+记忆化dp
- uva 10305 Ordering Tasks (简单拓扑)
- POJ 2762 —— Going from u to v or from v to u? 强连通+拓扑
- (beginer)DFS (强连通)UVA 11504 Dominos
- HDU 6073 Matching In Multiplication(强连通+拓扑)