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



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