题目描述
蒜头君和他的同事们最近在玩一个好玩的游戏:互粉攻略。一共有 N 个人参加游戏,编号从 0 到 N−1,游戏前每个人都会展示自己最靓丽的一面。当游戏开始时,每个人可以选择去关注别人。当 A 关注了B,则 A 就成了B 的粉丝,但是并不意味着 B 同时关注了 A。当所有人都选好后,游戏结束,人气指数最高的人成为冠军。蒜头君制定了奇怪的规定:一个人的人气指数等于他的粉丝数减去关注数,因为蒜头君觉得人气高的人,往往有很多粉丝,并且一般都非常高冷,很少去关注别人。 蒜头君发现一共有 MM 条关注,粗心的他在统计时出了点小问题,所以可能会出现重复的关注。现在蒜头君想知道每个人的人气指数,聪明的你能帮帮他么?
输入描述
第一行输入两个数 n 和 m,1≤n≤1000,1≤m≤100000。 接下来输入 m 行,每行输入两个数 a 和 b,表示编号 a 的人关注了编号 b 的人,0≤a,b≤n−1,a! =b。
输出描述
输出 N 行,每行输出每个人的人气指数,按编号依次输出即可。
样例输入
4 3
0 2
2 3
0 1
样例输出
-2
1
0
1
思路
解决这个问题的关键就是找到粉丝数和关注数。所以直接找出度和入度就行了。
AC代码
#include <iostream>
#include <string.h>
using namespace std;
const int maxn = 1000;
int mat[1000][1000];
int d[100000];
int e[100000];
void init(){
memset(mat,0,sizeof(mat));
}
void insert(int u,int v){
mat[u][v] = 1;
}
int main(){
init();
int n,m;
cin>>n>>m;
int x,y;
for(int i = 0;i<m;i++){
cin>>x>>y;
insert(x,y);
}
int o = 0,p = 0;
for(int k = 0;k<n;k++){
for(int g = 0;g<n;g++){
o+=mat[k][g];
p+=mat[g][k];
}
d[k]=o;
o=0;
e[k]=p;
p=0;
cout<<e[k]-d[k]<<endl;
}
}