HDU - 4738 Caocao's Bridges(桥)
来源:互联网 发布:黑马程序员品优购项目 编辑:程序博客网 时间:2024/05/22 00:18
题目大意:有N座小岛,M座桥,每座桥都有相应的士兵保守。现在你有一单位的炸药可以炸掉一座桥。要炸掉一座桥的话,你派的士兵数量至少要等于该桥的士兵数量
你的任务是使这些岛屿连通。问需要破坏哪一座桥,且派的士兵最小
解题思路:很简单吧,水题,找最小权值的“桥“就可以了
但是坑点多啊
如果不连通的话,就不用派士兵了
如果桥的最小权值是0的话,那么就是1了,因为至少得派一个人
#include <cstdio>#include <cstring>#include <vector>#include <stack>using namespace std;#define max(a,b)((a)>(b)?(a):(b))#define min(a,b)((a)<(b)?(a):(b))const int MAXNODE = 1005;const int MAXEDGE = 2000010;const int INF = 0x3f3f3f3f;struct Edge{ int v, id, next, cost; Edge() {} Edge(int v, int id, int next, int cost): v(v), id(id), next(next), cost(cost){}}E[MAXEDGE * 2];int head[MAXNODE], pre[MAXNODE], lowlink[MAXNODE];int n, m, tot, dfs_clock; bool flag;int ans, cnt;void AddEdge(int u, int v, int cost, int id) { E[tot] = Edge(v, id, head[u], cost); head[u] = tot++; u = u ^ v; v = u ^ v; u = u ^ v; E[tot] = Edge(v, id, head[u], cost); head[u] = tot++;}void init() { memset(head, -1, sizeof(head)); tot = 0; int u, v, c; for (int i = 1; i <= m; i++) { scanf("%d%d%d", &u, &v, &c); AddEdge(u, v, c, i); }}void dfs(int u, int fa) { pre[u] = lowlink[u] = ++dfs_clock; cnt++; for (int i = head[u]; ~i; i = E[i].next) { int v = E[i].v; if (E[i].id == fa) continue; if (!pre[v]) { dfs(v, E[i].id); lowlink[u] = min(lowlink[u], lowlink[v]);//更新 if (lowlink[v] > pre[u]) { flag = true; ans = min(ans, E[i].cost); } } else lowlink[u] = min(lowlink[u], pre[v]); }}void find_bcc() { memset(pre, 0, sizeof(pre)); dfs_clock = 0; dfs(1, -1);}void solve() { flag = false; ans = INF; cnt = 0; find_bcc(); if (cnt != n) { printf("0\n"); return ; } if (!flag) printf("-1\n"); else printf("%d\n", ans == 0 ? ans + 1 : ans);}int main() { while (scanf("%d%d", &n, &m) != EOF && n + m) { init(); solve(); } return 0;}
0 0
- HDU - 4738 Caocao's Bridges(桥)
- hdu 4738 Caocao's Bridges
- hdu 4738 Caocao's Bridges
- hdu 4738 Caocao's Bridges
- HDU:4738 Caocao's Bridges
- HDU 4738 Caocao's Bridges
- HDU 4738 Caocao's Bridges
- hdu 4738 - Caocao's Bridges
- hdu 4738 Caocao's Bridges
- HDU-4738Caocao's Bridges
- HDU Caocao's Bridges
- Caocao's Bridges HDU
- hdu 4738 Caocao's Bridges(求割边和桥)
- hdu 4738 Caocao's Bridges (割边/桥)
- hdu 4738 Caocao's Bridges 图--桥的判断模板
- hdu 4738 Caocao's Bridges (找桥,有重边)
- HDU 4738 Caocao's Bridges 桥+并查集
- HDU 4738 — Caocao's Bridges 判桥
- LeetCode Reverse Words in a String
- struts2自定义类型转换器
- UI编程:UIView及其子类
- 华为MATE7 无法打印android adb log
- Uber创始人:一个优秀创业者应具八种特质
- HDU - 4738 Caocao's Bridges(桥)
- linux之线程局部存储
- Android的广播机制——Broadcast Reciver
- EL表达式与JSTL
- Python 多重列表解析里for的顺序
- 1086. Tree Traversals Again (25)
- POJ 3237(树链剖分)
- JSP
- 函数指针