间谍网络(tarjan缩点)
2017-04-09 21:06
330 查看
看着这道题给人感觉就是tarjan求SCC,然而还得判断是否能控制全部间谍,这就得先从可以贿赂的点dfs一遍。
如果没有全部被标记了,就输出NO,再从没被标记的点里找最小的标号。
如果全被标记,就输出YES,再从入度为0的缩点里找最小的价格,加到ans中,最后输出ans。
——代码
#include <cstdio> #include <stack> #include <cstring> using namespace std; int n, p, r1, cnt, idx, ans = 30000001, minn; int a[3001], next[8001], to[8001], head[3001], low[3001], dfn[3001], belong[3001], r[3001]; bool ins[3001], vis[3001], mey[3001]; stack <int> s; inline void add(int x, int y) { to[cnt] = y; next[cnt] = head[x]; head[x] = cnt++; } void dfs(int u) { int i, v; vis[u] = 1; mey[u] = 1; for(i = head[u]; i != -1; i = next[i]) { v = to[i]; if(!vis[v]) dfs(v); } } void tarjan(int u) { low[u] = dfn[u] = ++idx; s.push(u); ins[u] = 1; int i, v; for(i = head[u]; i != -1; i = next[i]) { v = to[i]; if(!dfn[v]) { tarjan(v); low[u] = min(low[u], low[v]); } else if(ins[v]) low[u] = min(low[u], dfn[v]); } if(low[u] == dfn[u]) { cnt++; do { v = s.top(); s.pop(); ins[v] = 0; belong[v] = cnt; }while(u != v); } } int main() { int i, j, k, x, y, u, v; scanf("%d %d", &n, &p); for(i = 1; i <= p; i++) { scanf("%d", &x); scanf("%d", &a[x]); } memset(head, -1, sizeof(head)); scanf("%d", &r1); for(i = 1; i <= r1; i++) { scanf("%d %d", &x, &y); add(x, y); } for(i = 1; i <= n; i++) if(!vis[i] && a[i]) dfs(i); for(i = 1; i <= n; i++) if(!mey[i]) ans = min(ans, i); if(ans != 30000001) { printf("NO\n%d", ans); return 0; } cnt = 0; for(i = 1; i <= n; i++) if(!dfn[i]) tarjan(i); for(u = 1; u <= n; u++) for(i = head[u]; i != -1; i = next[i]) { v = to[i]; if(belong[u] != belong[v]) r[belong[v]]++; } ans = 0; for(i = 1; i <= cnt; i++) if(r[i] == 0) { minn = 30000001; for(j = 1; j <= n; j++) if(belong[j] == i && a[j]) minn = min(minn, a[j]); ans += minn; } printf("YES\n%d", ans); return 0; }View Code
相关文章推荐
- 【codevs4093】 EZ的间谍网络 强连通分量+tarjan缩点
- Tarjan缩点【p1262】间谍网络
- luogu1262 间谍网络(tarjan缩点)
- tyvj 1153间谍网络 tarjan+缩点
- 洛谷1262 间谍网络 tarjan缩点
- tarjan缩点以及链式前向星的基本+应用(洛谷1262 间谍网络)
- 洛谷1262间谍网络(tarjan缩点)
- P1262 间谍网络 (tarjan缩点 水过去)
- P1262 间谍网络 (tarjan缩点 水过去)
- tarjan题目(3)间谍网络
- 缩点【洛谷P1262】 间谍网络
- 洛谷 1262 间谍网络 Tarjan 图论
- 间谍网络--tarjan 解题报告
- 【codevs4093】EZ的间谍网络 tarjan
- 洛谷 1262 间谍网络 Tarjan 图论
- 洛谷 1262 间谍网络 Tarjan 图论
- 洛谷 1262 间谍网络 Tarjan 图论
- 2017acm乌鲁木齐赛区网络赛F题tarjan缩点
- 【基础练习】【强连通tarjan】codevs4093 EZ的间谍网络题解
- 洛谷 1262 间谍网络 Tarjan 图论