小信开了一家工厂,工厂中有
n条流水线和相同数量的对应仓库。为了让多条生产线的产品可以流入同一个仓库,小信在相邻流水线之间增加了机械臂,可以将货物从一条生产线转移到另一条。
显然,根据机械臂位置的不同,每个仓库都将接收到多个不同流水线的产品。现给定传送带的数量和机械臂的位置,问每个仓库能接受来自多少条流水线的产品。
第一行输出两个整数
n,m,表示流水线数量和机械臂数量,所有传送带从
x=0开始,延伸到
x=100000。
接下来
m行,每行包含两个整数xi(0<xi<100000),yi(1<=yi<n);表示第
i
i个机械臂的位置,其中xi
是机械臂在x轴上的位置,该机械臂可以在
x=xi;
位置抓取
y
i
或者
yi+1
号流水线上的产品,并转移到相邻流水线。
输出格式
输出一行
n个用空格分隔的整数。第
i个整数表示连接到第
i条流水线的仓库能接收来自多少条不同流水线的货物。
#include<bits/stdc++.h>
using namespace std;
long long n,m,b[200000+20];
vector<int>st[200000+20];
void dfs(int j,int k,vector<int> q){
b[j]++;
int f=0,f1=0;
for(auto t:q){
if(t==j-1){
f=1;
}
if(t==j+1){
f1=1;
}
}
q.push_back(j);
if(j-1>=1&&f==0){
for(auto t : st[j-1]){
if(t>=k){
dfs(j-1,t,q);
break;
}
}
}
if(j+1<=n&&f1==0){
for(auto t:st[j]){
if(t>=k){
dfs(j+1,t,q);
break;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
st[y].push_back(x);
}
for(int i=1;i<=n;i++){
sort(st[i].begin(),st[i].end());
}
for(int i=1;i<=n;i++){
vector<int>s;
dfs(i,0,s);
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}
return 0;
}