zoukankan      html  css  js  c++  java
  • UVALive 5099 Nubulsa Expo(全局最小割)

    题面

    vjudge传送门

    题解

    论文题

    见2016绍兴一中王文涛国家队候选队员论文《浅谈无向图最小割问题的一些算法及应用》4节

    全局最小割 板题

    CODE

    暴力O(n3)O(n^3)
    用堆优化可以做到O(nmlog)O(nmlog)
    这里只写了暴力

    #include <bits/stdc++.h>
    using namespace std;
    template<class T>inline void read(T &x) {
    	char ch; while(!isdigit(ch=getchar()));
    	for(x=ch-'0';isdigit(ch=getchar());x=x*10+ch-'0');
    }
    typedef long long LL;
    const int MAXN = 305;
    LL c[MAXN][MAXN], sum[MAXN];
    int n, m, s;
    bool del[MAXN], inq[MAXN];
    void merge(int u, int v) {
    	for(int i = 1; i <= n; ++i)
    		c[u][i] += c[v][i], c[i][u] += c[i][v];
    	del[v] = 1;
    }
    LL solve(int N) {
    	for(int i = 1; i <= n; ++i) sum[i] = inq[i] = 0;
    	int u=0, v=0;
    	for(int i = 1; i <= n; ++i) if(!del[i]) { v = i; break; }
    	while(--N) {
    		inq[u=v] = 1; v=0;
    		for(int i = 1; i <= n; ++i) if(!del[i] && !inq[i]) sum[i] += c[u][i];
    		for(int i = 1; i <= n; ++i) if(!del[i] && !inq[i] && sum[i] > sum[v]) v = i;
    	}
    	merge(u, v);
    	return sum[v];
    }
    int main () {
    	while(read(n), read(m), read(s), n&&m&&s) {
    		memset(del, 0, sizeof del);
    		for(int i = 1, x, y, z; i <= m; ++i)
    			read(x), read(y), read(z), c[x][y] += z, c[y][x] += z;
    		LL ans = 1ll<<50;
    		for(int i = n; i > 1; --i) ans = min(ans, solve(i));
    		printf("%lld
    ", ans);
    	}
    }
    
  • 相关阅读:
    Spark SQL+day04笔记
    Spark 环境搭建
    海量数据处理 算法总结2
    Scala面试题 看过1
    HTML-table、form表单标签的介绍
    Java-CSS美化网页元素
    Java-BOM与DOM对象
    java-CSS盒子模型、浮动、定位
    java-基础面试题(2)
    Java-io流
  • 原文地址:https://www.cnblogs.com/Orz-IE/p/12039173.html
Copyright © 2011-2022 走看看