设为首页 加入收藏

TOP

HDU 4738 Caocao's Bridges(找割边)
2015-07-20 17:47:51 来源: 作者: 【 】 浏览:25
Tags:HDU 4738 Caocao' Bridges

HDU 4738 Caocao's Bridges

题目链接

注意几个坑,可能重边,至少要派一个人去炸,没有连通的时候就不用炸了

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; const int N = 1005; const int INF = 0x3f3f3f3f; int pre[N], low[N], dfs_clock; int n, m; struct Node { int v, val, id; Node() {} Node(int v, int val, int id) { this->v = v; this->val = val; this->id = id; } }; vector
      
        g[N]; int ans; int dfs(int u, int fa) { int lowu = pre[u] = ++dfs_clock; for (int i = 0; i < g[u].size(); i++) { int v = g[u][i].v; int id = g[u][i].id; if (id == fa) continue; if (!pre[v]) { int lowv = dfs(v, id); lowu = min(lowu, lowv); if (lowv > pre[u]) ans = min(ans, g[u][i].val); } else lowu = min(lowu, pre[v]); } return low[u] = lowu; } int main() { while (~scanf("%d%d", &n, &m) && n) { int u, v, val; memset(pre, 0, sizeof(pre)); dfs_clock = 0; for (int i = 0; i < n; i++) g[i].clear(); for (int i = 0; i < m; i++) { scanf("%d%d%d", &u, &v, &val); u--; v--; g[u].push_back(Node(v, val, i)); g[v].push_back(Node(u, val, i)); } int cnt = 0; ans = INF; for (int i = 0; i < n; i++) { if (!pre[i]) { cnt++; dfs(i, -1); } } if (cnt > 1) printf("0\n"); else if (ans == INF) printf("-1\n"); else { if (ans == 0) ans = 1; printf("%d\n", ans); } } return 0; }
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu-4857 逃生 拓扑排序 下一篇ACdream1187(简单找规律)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)