Description
班上有 n 名同学。他们之间存在一些朋友关系:例如 A 和 B 是朋友,B 和 C 是朋友,C 和 D 是朋友……
今给出所有的朋友关系。问每个人有多少个直接朋友。
Input
第一行,两个正整数 n,m,表示班上的人数和朋友关系数。
接下来 m 行,每行两个正整数u,v,表示 u 和 v 之间存在朋友关系。保证 u≠v。
Output
共 n 行,第 i 行是一个整数,表示 i 同学有多少位朋友。
Sample 1
Inputcopy | Outputcopy |
---|---|
5 3 1 2 3 2 4 3 | 1 2 2 1 0 |
Hint
样例解释
- 1 同学的朋友是 2;
- 2 同学的朋友是 1、3;
- 3 同学的朋友是 2、4;
- 4 同学的朋友是 3;
- 5 同学没有朋友。
数据规模与约定
对于 40%40% 的数据,n,m≤1000。
对于 100%100% 的数据,n,m≤100000。数据中不存在重复的朋友关系。
本题可以用二维数组来解决
方法1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;//人数
int m;//朋友关系数
cin >> n >> m;
//创建一个二维数组来表示朋友关系
vector<vector<int>> friends(n);
//friends(n) n个空的一维数组
for(int i = 0;i < m;i++)
{
int u,v;
cin >> u >> v;
friends[u-1].push_back(v-1);//标记u和v是朋友
friends[v-1].push_back(u-1);//朋友关系是双向的
}
for(int i = 0;i < n;i++)
{
int friends_num = friends[i].size();
cout << friends_num <<endl;
}
return 0;
}
方法2(后面几组测试用例会报MLE)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;//人数
int m;//朋友关系数
cin >> n >> m;
//创建一个二维数组来表示朋友关系
vector<vector<int>> friends(n,vector<int>(n,0));
//vector<vector<int>>表示创建了一个二维数组
//vector(n, elem);//构造函数将n个elem拷贝给本身。
//friends(n,vector<int>(n,0)) 初始化
//读入朋友关系
for(int i = 0;i < m;i++)
{
int u,v;
cin >> u >> v;
friends[u-1][v-1] = 1;//标记u和v是朋友
friends[v-1][u-1] = 1;//朋友关系是双向的
}
//计算每个人有多少朋友
for(int i = 0;i < n;i++)
{
int friends_num = 0;
for(int j = 0;j < n;j++)
{
if(friends[i][j] == 1)
{
friends_num++;
}
}
cout << friends_num << endl;
}
return 0;
}