NC51294. GF和猫咪的玩具
描述
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)而不算全部拉紧。
通俗地说,也就是当两个环之间有几个绳索数相等的连接方法时,只算其中一条连接方法拉紧,不算全部拉紧。
输入描述
第一行包含两个正整数n,m。
接下来的m行包含两个正整数a,b,表示有一条绳索连接了a和b的绳索。
输出描述
仅包含一个整数,表示最多能拉紧的绳索数。
示例1
输入:
6 6 1 2 1 6 2 4 6 5 4 3 5 3
输出:
3
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 424K, 提交时间: 2022-08-20 11:57:50
#include<bits/stdc++.h> using namespace std; const int MAXN = 105; const int inf = 0x3f3f3f3f; int n,m; int dis[MAXN][MAXN]; int ans; int min(int x,int y){ if(x>y) return y; return x; } inline void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j && j!=k && i!=k) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } int main(){ memset(dis,0x3f,sizeof(dis)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int x,y; scanf("%d%d",&x,&y); dis[x][y]=dis[y][x]=1; } floyd(); for(int i=1;i<=n;i++) for(int j=1;j<i;j++) if(dis[i][j]>ans) ans=dis[i][j]; printf("%d\n",ans); return 0; }
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 508K, 提交时间: 2020-02-12 20:14:36
#include<bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; int mp[110][110]; int main(){ int n,m,x,y; memset(mp,INF,sizeof(mp)); scanf("%d%d",&n,&m); for(int i=0;i<m;++i){ scanf("%d%d",&x,&y); mp[x][y]=1; mp[y][x]=1; } for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]); int ans=0; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(mp[i][j]!=INF)ans=max(ans,mp[i][j]); printf("%d",ans); return 0; }
C++ 解法, 执行用时: 6ms, 内存消耗: 428K, 提交时间: 2022-04-16 18:40:34
#include<bits/stdc++.h> using namespace std; int e[105][105],n,m,t1,t2,ans; int main(){ cin>>n>>m; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(i-j)e[i][j]=1e9; for(int i=1;i<=m;i++)cin>>t1>>t2,e[t1][t2]=1,e[t2][t1]=1; for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)e[i][j]=min(e[i][j],e[i][k]+e[k][j]); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)ans=max(ans,e[i][j]); cout<<ans; return 0; }