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;
}