Rikka with Graph-------(BestCoder Round #53 (div.2))

Rikka with Graph

 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
問題描述
衆所周知,萌萌噠六花不擅長數學,所以勇太給了她一些數學問題做練習,其中有一道是這樣的:

勇太有一張nn個點mm條邊的無向圖,每一條邊的長度都是1。現在他想再在這張圖上連上一條連接兩個不同頂點邊,使得1號點到nn號點的最短路儘可能的短。現在他想要知道最短路最短是多少,以及再保證最短路最短的情況下,他有多少種連邊的方案。

當然,這個問題對於萌萌噠六花來說實在是太難了,你可以幫幫她嗎?
輸入描述
數據組數不超過100組。每組數據的第一行兩個整數n,m(2 \leq n \leq 100, 0 \leq m \leq 100)n,m(2n100,0m100)。

接下來mm行。每行兩個整數u,v(1 \leq u,v \leq n)u,v(1u,vn),代表原圖中的一條無向邊。注意可能有自環和重邊。
輸出描述
對於每一組數據輸出一行兩個整數:最短路最短是多少以及加邊的方案數。
輸入樣例
2 1
1 2
輸出樣例
1 1
Hint
你只能連上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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章