Submission #1198753

#TimeUsernameProblemLanguageResultExecution timeMemory
1198753Adeeb_obedoSeptember (APIO24_september)C++20
100 / 100
107 ms6664 KiB
#include<bits/stdc++.h>
#define int long long
#define ld   double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 1e9+7, dx[] = {-1, 1, 0, 0,-1,-1,1,1}, dy[] = {0, 0, -1, 1,-1,1,-1,1};
int mul( int x, int y ) {
    ret ( ( x % mo ) * ( y % mo ) ) % mo;
    ret x*y;
}
int pwo( int x, int y ) {
    int res = 1;
    for( int i = 63; i + 1; i-- )
        res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
    ret res;
}
int dvii( int x, int y ) {
    ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
    ret ( int )x - '0';
}
int lgg( int x, int y ) {
    int u = 0;
    while( x ) {
        u++;
        x /= y;
    }
    ret u;
}
int mun( int x, int y ) {
    while( x < y )x += mo;
    ret ( x - y ) % mo;
}
int add( int x, int y ) {
    ret x + y - ( mo * ( x + y >= mo ) );
    ret x + y;
}
int lcm( int x, int y ) {
    ret ( x * y ) / __gcd( x, y );
}
#include "september.h"
#define endl '\n';
const int M =4007, N = 2e5 + 7, N2 = 5e3 + 7, inf = 2e18 + 7;
int n,m;
intt solve(intt Nn, intt Mm, vector<intt> pr,vector<vector<intt>> a){
	n=Nn,m=Mm;
	vector<int>v(n),mp(n,m);
	for(int i=1;i<n;i++)
		v[pr[i]]++;
	int o=0,ans=0;
	set<ipr>st;
	for(int i=0;i<n-1;i++){
        st.insert({v[a[0][i]],a[0][i]});
		while(st.size()){
			ipr p=*st.begin();
			if(p._1>0)
				break;
			st.erase(p);
			ipr pp={v[pr[p._2]],pr[p._2]};
			v[pp._2]--;
			if(st.count(pp)){
				st.erase(pp);
				pp._1--;
				st.insert(pp);
			}
		}
		for(int j=0;j<m;j++){
			mp[a[j][i]]--;
			o+=(mp[a[j][i]]==0);
		}
		if(o==i+1&&st.size()==0)
			ans++;
	}
	ret ans;
}
/*
intt main() {
	FFF
    cin>>n>>m;
    int x;
    vector<int>v;vector<vector<int>>vv;
    for(int j=0;j<=m;j++){

    for(int i=0;i<n-1+(j==m);i++){
		int x;
		cin>>x;
		v.pb(x);
	}
		if(j!=m){
			vv.pb(v);
			v.clear();
		}
	}
    //freopen("revegetate.in", "r", stdin);
    //freopen("revegetate.out", "w", stdout);
	tst = 1;
	//cin >> tst;
    for ( ts = 1; ts <= tst; ts++ ) {
		cout<<solve(n,m,v,vv)<<endl;
    }
}

*/
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...