4109:公共朋友-Common Friends
总时间限制: 1000ms 内存限制: 65536kB
描述
小明和小红去参加party。会场中总共有n个人,这些人中有的是朋友关系,有的则相互不认识。朋友关系是相互的,即如果A是B的朋友,那么B也是A的朋友。小明和小红想知道其中某两个人有多少个公共的朋友。


输入
第一行为一个正整数c,代表测试数据的个数。接下来是c组测试数据。

对于每组测试数据,第一行是三个数字n(2<=n<=100),m和k,分别表示会场中的人数,已知的朋友关系数目,问题的数目。接下来的m行,每行用两个数字i和j(1<=i,j<=n)表示了一个朋友关系,表示第i个人和第j个人是朋友关系。接下来的k行,每行用两个数字i和j(1<=i,j<=n)表示一个问题,请问第i个人和第j个人有多少公共的朋友。
输出
对于第i组测试数据,首先输出一行”Case i:”,接下来得k行代表了k个问题,每行输出第i个人和第j个人有多少公共的朋友。
样例输入
2
3 2 2
1 2
2 3
1 3
1 2
5 5 2
1 2
1 3
2 5
3 5
4 5
1 5
3 4
样例输出
Case 1:
1
0
Case 2:
2
1























问题链接Bailian4109 公共朋友-Common Friends
问题简述:(略)
问题分析:关系计算问题,如同图的问题。数据规模不大,用二维数组存储关系,不详细解释。
程序说明:(略)
参考链接:(略)
题记:(略)




AC的C++语言程序如下:

/* Bailian4109 公共朋友-Common Friends */

#include <bits/stdc++.h>

using namespace std;

const int N = 100 + 1;
int r[N][N];

int main()
{
    int t, caseno = 0, n, m, k, u, v;
    scanf("%d", &t);
    while(t--) {
        scanf("%d%d%d", &n, &m, &k);

        memset(r, 0, sizeof(r));
        for(int i = 1; i <= m; i++) {
            scanf("%d%d", &u, &v);
            r[u][v] = r[v][u] = 1;
        }

        printf("Case %d:\n", ++caseno);
        for(int i = 0; i < k; i++) {
            scanf("%d%d", &u, &v);

            int cnt = 0;
            for(int i = 1; i <= n; i++)
                if(r[u][i] && r[v][i]) cnt++;
            printf("%d\n", cnt);
        }
    }

    return 0;
}
09-11 21:19