zoukankan      html  css  js  c++  java
  • [HNOI2006]公路修建问题 BZOJ1196 Kruskal

    题目描述

    输入输出格式

    输入格式:

    在实际评测时,将只会有m-1行公路

    输出格式:

    输入输出样例

    输入样例#1: 复制
    4 2 5 
    1 2 6 5
    1 3 3 1
    2 3 9 4
    2 4 6 1
    输出样例#1: 复制
    6 
    1 1 
    2 1 
    4 1
    样例貌似有点问题;
    其实就是按照贪心从小到大排序就行了;
    坑点就是取的maxx要一直维护(可能出现有的2级道路花费>1级道路)
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<map>
    #include<set>
    #include<vector>
    #include<queue>
    #include<bitset>
    #include<ctime>
    #include<deque>
    #include<stack>
    #include<functional>
    #include<sstream>
    //#include<cctype>
    //#pragma GCC optimize(2)
    using namespace std;
    #define maxn 200005
    #define inf 0x7fffffff
    //#define INF 1e18
    #define rdint(x) scanf("%d",&x)
    #define rdllt(x) scanf("%lld",&x)
    #define rdult(x) scanf("%lu",&x)
    #define rdlf(x) scanf("%lf",&x)
    #define rdstr(x) scanf("%s",x)
    typedef long long  ll;
    typedef unsigned long long ull;
    typedef unsigned int U;
    #define ms(x) memset((x),0,sizeof(x))
    const long long int mod = 1e9;
    #define Mod 1000000000
    #define sq(x) (x)*(x)
    #define eps 1e-5
    typedef pair<int, int> pii;
    #define pi acos(-1.0)
    //const int N = 1005;
    #define REP(i,n) for(int i=0;i<(n);i++)
    typedef pair<int, int> pii;
    
    inline int rd() {
    	int x = 0;
    	char c = getchar();
    	bool f = false;
    	while (!isdigit(c)) {
    		if (c == '-') f = true;
    		c = getchar();
    	}
    	while (isdigit(c)) {
    		x = (x << 1) + (x << 3) + (c ^ 48);
    		c = getchar();
    	}
    	return f ? -x : x;
    }
    
    
    ll gcd(ll a, ll b) {
    	return b == 0 ? a : gcd(b, a%b);
    }
    int sqr(int x) { return x * x; }
    
    
    
    /*ll ans;
    ll exgcd(ll a, ll b, ll &x, ll &y) {
    	if (!b) {
    		x = 1; y = 0; return a;
    	}
    	ans = exgcd(b, a%b, x, y);
    	ll t = x; x = y; y = t - a / b * y;
    	return ans;
    }
    */
    int n, K, m;
    struct node {
    	int x, y;
    	int ct1, ct2;
    	int used;
    	int fy;
    	int id;
    }e[maxn],a[maxn];
    bool cmp(node a, node b) {
    	return a.ct1 < b.ct1;
    }
    bool cmp2(node a, node b) {
    	return a.ct2 < b.ct2;
    }
    
    struct o {
    	int id, typ;
    }ans[maxn];
    
    int fa[maxn];
    void init() {
    	for (int i = 0; i <= n; i++)fa[i] = i;
    }
    
    int findfa(int x) {
    	if (x == fa[x])return x;
    	return fa[x] = findfa(fa[x]);
    }
    
    void merge(int u, int v) {
    	int p = findfa(u);
    	int q = findfa(v);
    	if (p != q)fa[p] = q;
    }
    bool cmp3(o a, o b) {
    	return a.id < b.id;
    }
    
    int main()
    {
    	//ios::sync_with_stdio(0);
    	cin >> n >> K >> m; init();
    	for (int i = 1; i < m; i++) {
    		int u, v, c1, c2;
    		u = rd(); v = rd(); c1 = rd(); c2 = rd();
    		e[i].x = u; e[i].y = v; e[i].ct1 = c1; e[i].ct2 = c2;
    		e[i].id = i;
    	}
    	sort(e + 1, e + m, cmp);
    	int tot = 0;
    	int maxx = -inf;
    	for (int i = 1; i < m; i++) {
    		int u = e[i].x;
    		int v = e[i].y;
    		if (findfa(u) != findfa(v)) {
    			e[i].used = 1; merge(u, v);
    			maxx = max(maxx, e[i].ct1);
    			ans[++tot].id = e[i].id; ans[tot].typ = 1;
    			if (tot >= K)break;
    		}
    	}
    	sort(e + 1, e + m, cmp2);
    	for (int i = 1; i < m; i++) {
    		if (!e[i].used) {
    			int u = e[i].x;
    			int v = e[i].y;
    			if (findfa(u) != findfa(v)) {
    				merge(u, v); ans[++tot].id = e[i].id;
    				ans[tot].typ = 2;
    				e[i].used = 1; maxx = max(maxx, e[i].ct2);
    				if (tot >= n - 1)break;
    			}
    		}
    	}
    	sort(ans + 1, ans + 1 + tot, cmp3);
    	cout << maxx << endl;
    	for (int i = 1; i <= tot; i++) {
    		printf("%d %d
    ", ans[i].id, ans[i].typ);
    	}
    	
    	return 0;
    }
    
    
    
    EPFL - Fighting
  • 相关阅读:
    virtualenvwrapper GitBash下的配置使用
    MySQL主从复制
    Nginx
    LVS
    MySQL
    Docker Swarm
    flask数据库操作
    flask 数据库迁移
    pytest.mark.parametrize 详解
    redis作为变量池在接口自动化中的应用
  • 原文地址:https://www.cnblogs.com/zxyqzy/p/10344905.html
Copyright © 2011-2022 走看看