杭电5422

来源:互联网 发布:杭州认知网络 编辑:程序博客网 时间:2024/06/04 15:26

看到题目时,以为很难,当初杭电上的这题我也没有做,结果组长又在考试中出了,然后没时间做了...

实际上连边时保证有1到n的边就可以保证距离最小了,为1。至于方案数,只用判断一下1到n是否已经有边了,有边的话,就有n*(n+1)/2种方案,即随便连;没边的话就只有将1到n连起来这种方案了。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){int n,m,u,v,i,flag;while(~scanf("%d%d",&n,&m)){flag=0;for(i=1;i<=m;i++){scanf("%d%d",&u,&v);if((u==1&&v==n)||(u==n&&v==1)){flag=1;}}if(flag==1)printf("1 %d\n",n*(n-1)/2);elseprintf("1 1\n");}return 0;}


0 0