| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
最大1000都过了。 数据不是一般的弱啊#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAX = 1005;
inline int min(int a, int b) { return a > b ? b : a; }
int low[MAX], dfn[MAX];
int mp[MAX][MAX];
int parent[MAX];
int belong[MAX], nedge = 0; //belong[i] 的值代表 节点i 属于 的边联通分量的序号 nedge代表边联通分量的个数
int n, r, time = 0;
int degree[MAX];
void tarjan(int u)
{
time++;
dfn[u] = low[u] = time;
for(int i =1; i <= n; i ++)
if(mp[u][i] == 1)
{
if(low[i] == 0) //i is not visited
{
parent[i] = u;
tarjan(i);
low[u] = min(low[u], low[i]);
if(dfn[u] < low[i])//(u, i)是桥, 值为2的边标记为桥
mp[u][i] ++;
}
else
{
if(parent[u] != i)
low[u] = min(low[u], dfn[i]);
}
}
}
//去掉是桥的那些边, 进行dfs, 找到所有的边联通分量
void dfs(int u) //形成一棵新的树
{
belong[u] = nedge;
for(int i = 1; i <= n; i ++)
if( parent[i] == u && mp[u][i] ==1 && belong[i] == 0)
{
dfs(i);
}
}
int main()
{
memset(low, 0, sizeof (low));
memset(dfn, 0, sizeof (dfn));
memset(mp, 0, sizeof(mp));
memset(belong, 0, sizeof (belong));
memset(degree, 0, sizeof (degree));
scanf("%d %d",&n, &r);
int s, t;
for(int i = 1 ; i <= r; i ++)
{
scanf("%d %d",&s, &t);
mp[s][t] = 1;
mp[t][s] = 1;
}
tarjan(1);
//for(int i =1 ; i <= n; i ++)
//{
//cout << dfn[i] <<" "<< low[i]<<" "<< parent[i] << endl;
//}
//for(int i = 1; i <= n; i ++,cout << endl)
//for(int j = 1; j <= n; j ++)
// cout << mp[i][j] <<' ';
// cout << endl;
nedge = 0;
for(int i = 1; i <= n; i ++)
if(belong[i] == 0) //如果i节点所属于哪个边联通分量还没确定,则开始搜索
{
nedge ++;
dfs(i);
}
//for(int j = 1; j <= n; j++)
// cout << belong[j] << ' ';
// cout << endl;
//统计入度为1的点
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
{
if(mp[i][j] == 2)
{
degree[belong[i]]++;
degree[belong[j]]++;
}
}
int ans = 0;
for(int i = 1 ;i <= nedge; i ++)
if(degree[i] == 1)
ans ++;
printf("%d\n", (ans + 1)/2);
cin >> ans;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator