제출 #1354064

#제출 시각아이디문제언어결과실행 시간메모리
1354064kokorooPPP (EGOI23_ppp)C++20
0 / 100
15 ms13768 KiB
#include<bits/stdc++.h>
//#include<atcoder/all>

using namespace std;
//using namespace atcoder;
#define rep(i,n) for(ll i=0; i<n; i++)
#define rrep(i,n) for(ll i=n-1; i>=0; i--)
#define print(a) cout<<a<<endl
typedef long long ll;
#define yn(flg) if(flg){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}
#define YN(flg) if(flg){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}
#define so(a) sort(a.begin(),a.end())
#define mp make_pair
#define vi vector<int>
#define vl vector<ll>
#define vs vector<string>
#define pb push_back
#define a2i(a,s) (ll)(a-s)
#define i2a(s,a) (char)(s+a)
#define ssize(a) a.size()
typedef pair<int, int> Pii;
typedef pair<int, ll> Pil;
typedef pair<pair<ll,ll>,ll> P3;
typedef pair<pair<ll,ll>,pair<ll,ll>> P4;

typedef pair<ll, ll> Pll;
typedef pair<ll,Pll> Plll;
typedef pair<Pii, int> Piii;
const ll INF = 1000000000000000000;

template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;

}
using ull=unsigned long long;


vector<ll> V1(200009,-INF);//メダルanswer
vector<ll> V2(200009,0);//選手途中経過
vector<ll> x(200009);
vector<ll> y(200009);


vector<ll> v[100009];//メダルIの親
ll p=0;

void saiki(ll pos,ll cost,ll POS){

	for(ll i=0;i<v[pos].size();i++){

		ll nx=v[pos][i];

		V2[x[nx]]+=(pos-nx);

//		cout<<pos<<" "<<nx<<" "<<x[nx]<<" "<<V2[x[nx]]<<endl;

		if(cost<V2[x[nx]]){
			V1[nx]=x[nx];
			saiki(nx,V2[x[nx]],x[nx]);
		}else if(cost==V2[x[nx]]){
			if(POS<x[nx]){
				V1[nx]=POS;
				saiki(nx,cost,POS);
			}else{
				V1[nx]=x[nx];
				saiki(nx,V2[x[nx]],x[nx]);
			}
		}else{
			V1[nx]=POS;
			saiki(nx,cost,POS);
		}

		V2[x[nx]]-=(pos-nx);
	}

}


int main(){
//入力

	cin.tie(0);
	ios::sync_with_stdio(0);

	ll n,m;
	cin>>n>>m;



	vector<ll> V(n+1,-INF);//`各々の選手の持ってるメダルの最大
	for(ll i=0;i<m;i++){
		cin>>x[i]>>y[i];
		if(V[x[i]]!=-INF)v[i].push_back(V[x[i]]);
		if(V[y[i]]!=-INF)v[i].push_back(V[y[i]]);
		V[x[i]]=i;
		V[y[i]]=-INF;
	}

//深さ優先探索
	for(ll i=m-1;i>=0;i--){
		if(V1[i]==-INF){
			V2[i]=(m-i);
			V1[i]=x[i];
			saiki(i,V2[i],x[i]);
			V2[i]-=(m-i);
		}
	}


	vector<ll> ans(n);
	for(ll i=0;i<m;i++)ans[V1[i]]++;
	for(ll i=0;i<n;i++)cout<<ans[i]<<" ";


	cout<<endl;

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...