问题描述
蒜头君和他的同事们最近在玩一个好玩的游戏:互粉攻略。一共有 N 个人参加游戏,编号从 0 到 N−1,游戏前每个人都会展示自己最靓丽的一面。当游戏开始时,每个人可以选择去关注别人。当 A 关注了 B,则 A 就成了 B 的粉丝,但是并不意味着 B 同时关注了 A。当所有人都选好后,游戏结束,人气指数最高的人成为冠军。蒜头君制定了奇怪的规定:一个人的人气指数等于他的粉丝数减去关注数,因为蒜头君觉得人气高的人,往往有很多粉丝,并且一般都非常高冷,很少去关注别人。
蒜头君发现一共有 M 条关注,粗心的他在统计时出了点小问题,所以可能会出现重复的关注。现在蒜头君想知道每个人的人气指数,聪明的你能帮帮他么?
输入格式
第一行输入两个数 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
#include<bits/stdc++.h>
using namespace std;
const int MAX_N=1010;
const int MAX_M=100010;
int g[MAX_N]={0};//关注数
int f[MAX_N]={0};//粉丝数
int vst[MAX_N][MAX_N]={{0}};//记录是否出现过
int n,m;
int main()
{
cin>>n>>m;
int u,v;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
if(!vst[u][v])
{
g[u]++;
f[v]++;
vst[u][v]=1;
}
}
for(int i=0;i<n;i++)
{
cout<<f[i]-g[i]<<endl;
}
return 0;
}
/*
10 12
3 5
1 6
3 5
9 1
7 9
3 9
4 2
2 6
9 4
3 1
2 0
3 0
*/
改进方法:可以只设置一个数组,被关注用++,关注用--,节省空间