• zoj 3792 Romantic Value


    题目链接

    求最小割的值, 以及割边最少的情况的边数。

    先求一遍最小割, 然后把所有割边的权值变为1, 其他边变成inf, 在求一遍最小割, 此时求出的就是最少边数。

    Inf打成inf  WA了好几发............

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 #define pb(x) push_back(x)
      4 #define ll long long
      5 #define mk(x, y) make_pair(x, y)
      6 #define lson l, m, rt<<1
      7 #define mem(a) memset(a, 0, sizeof(a))
      8 #define rson m+1, r, rt<<1|1
      9 #define mem1(a) memset(a, -1, sizeof(a))
     10 #define mem2(a) memset(a, 0x3f, sizeof(a))
     11 #define rep(i, a, n) for(int i = a; i<n; i++)
     12 #define ull unsigned long long
     13 typedef pair<int, int> pll;
     14 const double PI = acos(-1.0);
     15 const double eps = 1e-8;
     16 const int mod = 1e9+7;
     17 const int inf = 1e4;
     18 const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
     19 const int maxn = 2e5+5;
     20 int num, q[maxn*5], head[maxn*2], dis[maxn*2], s, t;
     21 struct node
     22 {
     23     int to, nextt, c;
     24     node(){}
     25     node(int to, int nextt, int c):to(to), nextt(nextt), c(c){}
     26 }e[maxn*2];
     27 int bfs() {
     28     mem(dis);
     29     int st = 0, ed = 0;
     30     dis[s] = 1;
     31     q[ed++] = s;
     32     while(st<ed) {
     33         int u = q[st++];
     34         for(int i = head[u]; ~i; i = e[i].nextt) {
     35             int v = e[i].to;
     36             if(!dis[v]&&e[i].c) {
     37                 dis[v] = dis[u]+1;
     38                 if(v == t)
     39                     return 1;
     40                 q[ed++] = v;
     41             }
     42         }
     43     }
     44     return 0;
     45 }
     46 int dfs(int u, int limit) {
     47     int cost = 0;
     48     if(u == t)
     49         return limit;
     50     for(int i = head[u]; ~i; i = e[i].nextt) {
     51         int v = e[i].to;
     52         if(e[i].c&&dis[v] == dis[u]+1) {
     53             int tmp = dfs(v, min(e[i].c, limit-cost));
     54             if(tmp>0) {
     55                 e[i].c -= tmp;
     56                 e[i^1].c += tmp;
     57                 cost += tmp;
     58                 if(cost == limit)
     59                     break;
     60             } else {
     61                 dis[v] = -1;
     62             }
     63         }
     64     }
     65     return cost;
     66 }
     67 int dinic() {
     68     int ans = 0;
     69     while(bfs()) {
     70         ans += dfs(s, inf);
     71     }
     72     return ans;
     73 }
     74 void add(int u, int v, int c) {
     75     e[num] = node(v, head[u], c); head[u] = num++;
     76     e[num] = node(u, head[v], c); head[v] = num++;
     77 }
     78 void init() {
     79     mem1(head);
     80     num = 0;
     81 }
     82 int main()
     83 {
     84     int T, m, n, x, y, q, p, z;
     85     cin>>T;
     86     while(T--) {
     87         init();
     88         int sum = 0;
     89         scanf("%d%d%d%d", &n, &m, &p, &q);
     90         s = p, t = q;
     91         while(m--) {
     92             scanf("%d%d%d", &x, &y, &z);
     93             add(x, y, z);
     94             sum += z;
     95         }
     96         int ans = dinic();
     97         if(ans == 0) {
     98             cout<<"Inf"<<endl;
     99             continue;
    100         }
    101         sum -= ans;
    102         for(int i = 0; i<num; i+=2) {
    103             if(e[i].c == 0) {
    104                 e[i].c = 1;
    105                 e[i^1].c = inf;
    106             } else if(e[i^1].c==0) {
    107                 e[i].c = inf;
    108                 e[i^1].c = 1;
    109             } else {
    110                 e[i].c = e[i^1].c = inf;
    111             }
    112         }
    113         ans = dinic();
    114         printf("%.2f
    ", 1.0*sum/ans);
    115     }
    116 }
  • 相关阅读:
    2018 我要告诉你的 Vue 知识大全
    探究Javascript模板引擎mustache.js使用方法
    高性能JavaScript模板引擎实现原理详解
    junit报错
    http报文
    web应用和http协议
    eclipse首次使用基本设置
    利用亚马逊AWS搭建个人服务器
    图文详解 IntelliJ IDEA 15 创建普通 Java Web 项目
    MyEclipse 设置条件断点
  • 原文地址:https://www.cnblogs.com/yohaha/p/5023781.html
Copyright © 2020-2023  润新知