【bzoj2935】【Poi1999】原始生物
2935: [Poi1999]原始生物
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 145 Solved: 71
[Submit][Status][Discuss]
Description
原始生物的遗传密码是一个自然数的序列K=(a,...,a)。原始生物的特征是指在遗传密码中连续出现的数对(l,r),即存在自然数i使得l=a且r=a。在原始生物的遗传密码中不存在(p,p)形式的特征。
求解任务:
请设计一个程序:
·读入一系列的特征。
·计算包含这些特征的最短的遗传密码。
·将结果输出
Input
第一行是一个整数n ,表示特征的总数。在接下来的n行里,每行都是一对由空格分隔的自然数l 和r ,1 <= l,r <= 1000。数对(l, r)是原始生物的特征之一。输入文件中的特征不会有重复。
Output
唯一一行应该包含一个整数,等于包含了PIE.IN中所有特征的遗传密码的最小长度。
Sample Input
12
2 3
3 9
9 6
8 5
5 7
7 6
4 5
5 1
1 4
4 2
2 8
8 6
2 3
3 9
9 6
8 5
5 7
7 6
4 5
5 1
1 4
4 2
2 8
8 6
Sample Output
15
注:
PIE.IN中的所有特征都包含在以下遗传密码中:
(8, 5, 1, 4, 2, 3, 9, 6, 4, 5, 7, 6, 2, 8, 6)
#include<cstdio>
//#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define INF 0x3f3f3f3f
#define re register
#define Ii inline int
#define Il inline long long
#define Iv inline void
#define Ib inline bool
#define Id inline double
#define ll long long
#define Fill(a,b) memset(a,b,sizeof(a))
#define R(a,b,c) for(register int a=b;a<=c;++a)
#define nR(a,b,c) for(register int a=b;a>=c;--a)
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
#define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
#define D_e(x) printf("&__ %d __&\n",x)
#define D_e_Line printf("-----------------\n")
using namespace std;
const int N=;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
Iv print(int x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
int fa[N],deg[N],vis[N],tag[N];
Ii Find(int x){
return x==fa[x]?x:fa[x]=Find(fa[x]);
}
int main(){
int m=read(),n=;
R(i,,n)fa[i]=i;//Father
R(i,,m){
int u=read(),v=read();
++deg[u],--deg[v],//Out- In
vis[u]=,vis[v]=,
fa[Find(u)]=Find(v);//Union
}
int sum=;
R(i,,n)
if(deg[i])
tag[Find(i)]=,//In the same tag
sum+=abs(deg[i]);
int k=;
R(i,,n)
if(vis[i]&&Find(i)==i&&!tag[i])
++k;//Totol tags
print(k+(sum>>)+m);
return ;
}
/*
5
1 3
3 4
2 4
4 7
4 6 6
1 2
1 3
1 6
2 3
3 4
2 5
*/