码迷,mamicode.com
首页 > Web开发 > 详细

UVA - 315 Network 和 UVA - 10199 (求割顶)

时间:2015-05-23 00:03:21      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

链接 :


http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20837

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21278

求割顶的裸题。


UVA - 315

#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <map>
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define mem(a) memset(a,0,sizeof(a))
typedef long long ll;
const int N = 100005;
const int M = 105;
const ll mod = 1000000009;

using namespace std;

int n;
vector <int> G[N];
int dfs_clock, bcc_cnt, pre[N], iscut[N], bcc[N];

int dfs(int u, int fa) {
	int lowu = pre[u] = ++dfs_clock;
	int child = 0;
	for(int i = 0; i < G[u].size(); i++) {
		int v = G[u][i];
		if(pre[v] == 0) {
			child++;
			int lowv = dfs(v, u);
			lowu = min(lowu, lowv);
			if(lowv >= pre[u]) {
				iscut[u] = 1;
			}
		} else if(pre[v] < pre[u] && v != fa) {
			lowu = min(lowu, pre[v]);
		}
	}
	if(fa < 0 && child == 1) {
		iscut[u] = 0;
	}
	return lowu;
}

void find_bcc() {
	mem(pre);
	mem(iscut);
	mem(bcc);
	dfs_clock = bcc_cnt = 0;
	for(int i = 0; i < n; i++) {
		if(pre[i] == 0) {
			dfs(i, -1);
		}
	}	
}

int main() {
	
//	freopen("in.txt", "r", stdin);
	while(cin >> n, n) {
		getchar();
		for(int i = 0; i < n; i++) {
			G[i].clear();
		}
		string line;
		while(getline(cin, line)) {
			if(line == "0") break;
			int x;
			stringstream ss(line);
			int ok = 1, u;
			while(ss >> x) {
				x--;
//				printf("%d ", x+1);
				if(ok) {
					u = x;
					ok = 0;
				} else {
					G[u].push_back(x);
					G[x].push_back(u);
				}
			}

			
		}
//		puts("");
//		for(int i = 0; i < n; i++) {
//			printf("%d : ", i+1);
//			for(int j = 0; j < G[i].size(); j++) {
//				printf("%d ", G[i][j] + 1);
//			}
//			puts("");
//		}
		find_bcc();
		int ans = 0;
		for(int i = 0; i < n; i++) {
			if(iscut[i]) ans++;
		}
		printf("%d\n", ans);
		
	}
	
	return 0;
}



UVA - 10199

#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define mem(a) memset(a,0,sizeof(a))
typedef long long ll;
const int N = 105;
const int M = 10005;
const ll mod = 1000000009;

using namespace std;

int n, m;
vector <int> G[N];
int dfs_clock, bcc_cnt, pre[N], iscut[N], bcc[N];

int dfs(int u, int fa) {
	int lowu = pre[u] = ++dfs_clock;
	int child = 0;
	for(int i = 0; i < G[u].size(); i++) {
		int v = G[u][i];
		if(pre[v] == 0) {
			child++;
			int lowv = dfs(v, u);
			lowu = min(lowu, lowv);
			if(lowv >= pre[u]) {
				iscut[u] = 1;
			}
		} else if(pre[v] < pre[u] && v != fa) {
			lowu = min(lowu, pre[v]);
		}
	}
	if(fa < 0 && child == 1) {
		iscut[u] = 0;
	}
	return lowu;
}

void find_bcc() {
	mem(pre);
	mem(iscut);
	mem(bcc);
	dfs_clock = bcc_cnt = 0;
	for(int i = 0; i < n; i++) {
		if(pre[i] == 0) {
			dfs(i, -1);
		}
	}	
}

int main() {
	
		//freopen("in.txt", "r", stdin);
		int ca = 1;
		while(cin >> n) {
			if(n == 0) break;
			
			for(int i = 0; i < n; i++) {
				G[i].clear();
			}
			map<string, int> mp;
			string s, t, in[N];
			for(int i = 0; i < n; i++) {
				cin >> in[i];
				mp[in[i]] = i;
			}
			cin >> m;
			for(int i = 0; i < m; i++) {
				cin >> s >> t;
				int x = mp[s];
				int y = mp[t];
				G[x].push_back(y);
				G[y].push_back(x);
			}
			
			find_bcc();
			
			int ans = 0;
			set<string> st;
			for(int i = 0; i < n; i++) {
				if(iscut[i]) {
					st.insert(in[i]);
					ans++;
				}
			}
			
			if(ca > 1) puts("");
			printf("City map #%d: %d camera(s) found\n", ca++, ans);
			for(set<string>::iterator it = st.begin(); it != st.end(); ++it) {
				cout << *it << endl;
			}
			
		}
		
	
	
	return 0;
}






UVA - 315 Network 和 UVA - 10199 (求割顶)

标签:

原文地址:http://blog.csdn.net/u013923947/article/details/45922603

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!