[TYVJ] P1423 GF和猫咪的玩具
GF和猫咪的玩具
描述 Description
GF同学和猫咪得到了一个特别的玩具,这个玩具由n个金属环(编号为1---n),和m条绳索组成,每条绳索连接两个不同的金属环,并且长度相同。GF左手拿起金属环L,猫咪右手(或者说:爪)拿起金属环R(L不等于R),然后尽量的向两边拉,他希望选择合适的L和R,使得被拉紧的绳索尽量的多。
注:如果像样例那样1-2-4-3-5-6-1构成了一个环,我们认为拉1和3时只能拉紧一边(1-2-4-3或3-5-6-1)而不算全部拉紧。通俗地说,也就是当两个环之间有几个绳索数相等的连接方法时,只算其中一条连接方法拉紧,不算全部拉紧。
注:如果像样例那样1-2-4-3-5-6-1构成了一个环,我们认为拉1和3时只能拉紧一边(1-2-4-3或3-5-6-1)而不算全部拉紧。通俗地说,也就是当两个环之间有几个绳索数相等的连接方法时,只算其中一条连接方法拉紧,不算全部拉紧。
输入格式 InputFormat
第一行包含两个正整数n,m
接下来的m行包含两个正整数a,b,表示有一条绳索连接了a和b的绳索。
n<=100
接下来的m行包含两个正整数a,b,表示有一条绳索连接了a和b的绳索。
n<=100
输出格式 OutputFormat
仅包含一个整数,表示最多能拉紧的绳索数。
样例输入 SampleInput [复制数据]
6 6
1 2
1 6
2 4
6 5
4 3
5 3
样例输出 SampleOutput [复制数据]
3
题解:最短路变形题。n<=100 所以O(n3)的Floyd就可以AC。
代码:
1 #include<stdio.h> 2 #include<string.h> 3 int i,j,n,m,k,x,y,mx,a[110][110]; 4 5 int 6 pre(void) 7 { 8 memset(a,1,sizeof(a)); 9 return 0; 10 } 11 12 int 13 add(int x,int y) 14 { 15 a[x][y]=1; 16 a[y][x]=1; 17 return 0; 18 } 19 20 int 21 min(int a,int b) 22 { 23 if (a<b) return(a); 24 else return(b); 25 } 26 27 int 28 init(void) 29 { 30 scanf("%d%d\n",&n,&m); 31 for(i=1;i<=m;i++) 32 { 33 scanf("%d%d",&x,&y); 34 add(x,y); 35 } 36 return 0; 37 } 38 39 int 40 main(void) 41 { 42 pre(); 43 init(); 44 45 for(k=1;k<=n;k++) 46 for(i=1;i<=n;i++) 47 for(j=1;j<=n;j++) 48 if ((i!=j)&&(i!=k)&&(k!=j)) 49 a[i][j]=min(a[i][j],a[i][k]+a[k][j]); 50 51 mx=-35111111; 52 for(i=1;i<=n;i++) 53 for(j=1;j<=n;j++) 54 if(i!=j) 55 if (a[i][j]>mx) mx=a[i][j]; 56 57 printf("%d\n",mx); 58 return 0; 59 } 60 61