zoukankan      html  css  js  c++  java
  • POJ 1904 King's Quest(强连通)

    POJ 1904 King's Quest

    题目链接

    题意:n个男人。每一个人都有一个喜欢的女人列表,如今给一个完美匹配,问全部完美匹配中,每一个人可能娶到的女人列表

    思路:强连通,建图,男的连一条边指向女,然后完美匹配的边女的指向男,然后求强连通,在同一个强连通分支而且是自己想娶的的就可能娶到

    代码:

    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    #include <stack>
    using namespace std;
    
    const int N = 4005;
    int n;
    vector<int> g[N];
    int ans[N], an;
    stack<int> S;
    
    int pre[N], dfn[N], dfs_clock, sccno[N], sccn;
    
    void dfs_scc(int u) {
    	pre[u] = dfn[u] = ++dfs_clock;
    	S.push(u);
    	for (int i = 0; i < g[u].size(); i++) {
    		int v = g[u][i];
    		if (!pre[v]) {
    			dfs_scc(v);
    			dfn[u] = min(dfn[u], dfn[v]);
    		} else if (!sccno[v]) dfn[u] = min(dfn[u], pre[v]);
    	}
    	if (pre[u] == dfn[u]) {
    		sccn++;
    		while (1) {
    			int x = S.top(); S.pop();
    			sccno[x] = sccn;
    			if (x == u) break;
    		}
    	}
    }
    
    void find_scc() {
    	dfs_clock = sccn = 0;
    	memset(pre, 0, sizeof(pre));
    	memset(sccno, 0, sizeof(sccno));
    	for (int i = 1; i <= 2 * n; i++)
    		if (!pre[i]) dfs_scc(i);
    }
    
    int main() {
    	while (~scanf("%d", &n)) {
    		for (int i = 1; i <= 2 * n; i++) g[i].clear();
    		int a, b;
    		for (int i = 1; i <= n; i++) {
    			scanf("%d", &a);
    			while (a--) {
    				scanf("%d", &b);
    				g[i].push_back(b + n);
    			}
    		}
    		for (int i = 1; i <= n; i++) {
    			scanf("%d", &a);
    			g[a + n].push_back(i);
    		}
    		find_scc();
    		for (int i = 1; i <= n; i++) {
    			an = 0;
    			for (int j = 0; j < g[i].size(); j++) {
    				if (sccno[i] == sccno[g[i][j]])
    					ans[an++] = g[i][j] - n;
    			}
    			sort(ans, ans + an);
    			printf("%d", an);
    			for (int j = 0; j < an; j++)
    				printf(" %d", ans[j]);
    			printf("
    ");
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    quartz 中JobExecutionContext的使用
    Memcached 集群架构方面的问题
    Spring+Quartz 集群
    Spring Quartz 持久化解决方案
    不同版本(2.3,2.4,2.5) web.xml 的web-app头信息
    Spring Framework 4.0.0发布,首次支持Java 8
    Serializable java序列化
    Quartz 有状态的JobDataMap
    JobDataMap 不能被序列化如何解决研究中
    Spring-3.2.5 + Quartz-2.2.1 集群实例(Tomcat+Memcached+Quartz集群session共享)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7235293.html
Copyright © 2011-2022 走看看