思路

很显然与第个位子无关,只要知道最大长度,其他尽可能贪心取最大值即可,当然一个位子不能重复操作,然后用去重即可,然后题目给定的不同,所以就不需要特判.

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int d[N],ans[N];
unordered_map<int,bool>p[N];
int main()
{
    int n,i,h,r;
    cin>>n>>i>>h>>r;
    int val=h;
    for(int j=1;j<=r;j++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        if(x>y)     swap(x,y);
        if(p[x][y]) continue;
        p[x][y]=true;
        d[x+1]--;d[y]++;
    }
    for(int i=1;i<=n;i++)   val+=d[i],ans[i]=val;
    for(int i=1;i<=n;i++)
        printf("%d\n",ans[i]);
    return 0;
}