Rikka with Graph
众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的: 勇太有一张n个点m条边的无向图,每一条边的长度都是1。现在他想再在这张图上连上一条连接两个不同顶点边,使得1号点到n号点的最短路尽可能的短。现在他想要知道最短路最短是多少,以及再保证最短路最短的情况下,他有多少种连边的方案。 当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗?
数据组数不超过100组。每组数据的第一行两个整数n,m(2≤n≤100,0≤m≤100)。 接下来m行。每行两个整数u,v(1≤u,v≤n),代表原图中的一条无向边。注意可能有自环和重边。
对于每一组数据输出一行两个整数:最短路最短是多少以及加边的方案数。
2 1 1 2
1 1
你只能连上1 2这条边。
分析:主要判断1和n是否有边,如果有边,则答案是n*(n-1)/2。否则答案是1.最短路最短都是1.
本题我找的hack点是输入的u,v不一定是1 n,也可能是n 1.我利用这个hack掉别人,嘻嘻。
CODE:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int n,m,edge[105][105];
while(cin>>n>>m){
int a,b;
memset(edge,0,sizeof(edge));
for(int i=0;i<m;i++){
cin>>a>>b;
edge[a][b]=edge[b][a]=1;
}
if(!edge[1][n]){
cout<<"1 1"<<endl;
}
else{
int t=(n*(n-1))/2;
cout<<"1 "<<t<<endl;
}
}
return 0;
}