zoukankan      html  css  js  c++  java
  • [ZJOI2009]假期的宿舍

    一眼二分图,匈牙利上。

    /**
     * Problem:Holiday
     * Author:Shun Yao
     * Time:2013.5.31
     * Result:Accepted
     * Memo:matching
     */
    
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    
    const long Maxt = 55, Maxm = 2505;
    
    long n, wt, used[Maxt];
    char vis[Maxt], a[Maxt], c[Maxt];
    
    long tot;
    class gnode {
    public:
    	long v;
    	gnode *next;
    	gnode() {}
    	~gnode() {}
    	gnode(long V, gnode *ne):v(V), next(ne) {}
    } *g[Maxt], G[Maxm];
    
    void add(long x, long y) {
    	g[x] = &(G[tot++] = gnode(y, g[x]));
    }
    
    char dfs(long x) {
    	for (gnode *e = g[x]; e; e = e->next) if (!vis[e->v]) {
    		vis[e->v] = 1;
    		if (!used[e->v] || dfs(used[e->v])) {
    			used[e->v] = x;
    			return 1;
    		}
    	}
    	return 0;
    }
    
    int main() {
    	static long T, i, j, b;
    	freopen("holiday.in", "r", stdin);
    	freopen("holiday.out", "w", stdout);
    	scanf("%ld", &T);
    	while (T--) {
    		scanf("%ld", &n);
    		for (i = 1; i <= n; ++i)
    			g[i] = 0;
    		for (i = 1; i <= n; ++i)
    			scanf("%ld", a + i);
    		wt = 0;
    		for (i = 1; i <= n; ++i) {
    			scanf("%ld", &b);
    			if (!a[i] || !b) {
    				c[i] = 1;
    				++wt;
    			} else
    				c[i] = 0;
    		}
    		tot = 0;
    		for (i = 1; i <= n; ++i) {
    			for (j = 1; j <= n; ++j) {
    				scanf("%ld", &b);
    				if (c[i] && a[j] && (i == j || b))
    					add(i, j);
    			}
    		}
    		memset(used, 0, sizeof used);
    		for (i = 1; i <= n; ++i) if (c[i]) {
    			memset(vis, 0, sizeof vis);
    			if (dfs(i))
    				--wt;
    		}
    		if (!wt)
    			puts("^_^");
    		else
    			puts("T_T");
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    将"089,0760,009"变为 89,760,9
    单向循环链表
    双链表复习
    【C语言】scanf()输入浮点型数据
    【C语言】一元二次方程(求实根和虚根)
    输入一个三位正整数,输出百位数,十位数,个位数
    输入身份证号,输出出生日期
    比较四个数的大小
    比较三个数的大小
    比较两个数的大小
  • 原文地址:https://www.cnblogs.com/hsuppr/p/3115473.html
Copyright © 2011-2022 走看看