poj1144 割顶

简介:
如果节点没被访问过才child++
#include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<cstring>
    using namespace std;
    vector<int> g[211];
    int dfs_clock, n, pre[211], cut[211];
    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]){
        	child ++;
    	    	int lowv = dfs(v, u);
    	    	lowu = min(lowu, lowv);
    	    	if (lowv >= pre[u]) cut[u] = 1;
    	    }else 
    	    if (v != fa && pre[u] > pre[v]) lowu = min(lowu, pre[v]);
        } 
        if (fa < 0) cut[u] = child > 1 ? 1 : 0;
        return lowu;
    }
    int main(){
    	while (cin>>n && n){
    		dfs_clock = 0;
    		for (int i = 1; i <= 100; i++) g[i].clear();
    		memset(pre, 0, sizeof(pre));
    		memset(cut, 0, sizeof(cut));
    		int u, v;
    		while (cin>>u && u){
    			while (getchar() != '\n'){
    				cin>>v;
    				g[u].push_back(v);g[v].push_back(u);
    			}
    		}
    		if (n < 3) {
    			cout<<"0\n";
    			continue;
    		}
    		dfs(1, -1);
    		int ans = 0;
    		for (int i = 1; i <= n; i++) ans += cut[i];
    		cout<<ans<<'\n';
    	}
    	return 0;
    }

相关文章
|
人工智能 算法 BI
poj 2192 Zipper
题目链接:http://poj.org/problem?id=2192 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18658   Accepted: 6651 Description Given ...
976 0
poj 3620
题意:给出一个矩阵,其中有些格子干燥、有些潮湿。       如果一个潮湿的格子的相邻的四个方向有格子也是潮湿的,那么它们就可以构成更大       的湖泊,求最大的湖泊。       也就是求出最大的连在一块儿的潮湿的格子的数目。
573 0
|
算法 数据建模 机器学习/深度学习
|
JavaScript
poj-2551-ones
Description Given any integer 0
773 0
poj-1008-玛雅历
Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有19个月,在开始的18个月,一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。
883 0
|
机器学习/深度学习