Submission #1348647

#TimeUsernameProblemLanguageResultExecution timeMemory
1348647tamiji9월 (APIO24_september)C++20
100 / 100
208 ms41176 KiB
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#include"september.h"
using ll=long long;
#define rep(i,n) for(ll i=0;i<(n);++i)
#define repr(i,n) for(ll i=(n)-1;i>=0;--i)
#define repa(i,m,n) for(ll i=(m);i<(n);++i)
#define repra(i,m,n) for(ll i=(n)-1;i>=(m);--i)
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
constexpr ll INF=1LL<<60;
struct ll2{ll a,b;friend auto operator<=>(ll2,ll2)=default;};
struct ll3{ll a,b,c;friend auto operator<=>(ll3,ll3)=default;};
struct ll4{ll a,b,c,d;friend auto operator<=>(ll4,ll4)=default;};
template<typename T>
ostream& operator<<(ostream& os,vector<T> A){
    os<<'(';
    for(T a:A)os<<a<<' ';
    os<<')';
    return os;
}
constexpr ll m1=998244353,m2=988244353,m3=1145141919;
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S){
	vector<vector<ll>> G(N);
	repa(i,1,N)G[F[i]].push_back(i);
	set<ll> T;
	rep(i,N)T.insert(i);
	vector<set<ll3>> U(N);
	vector<ll> p1={1},p2={1},p3={1};
	rep(i,N){
		p1.push_back(p1[i]*2%m1);
		p2.push_back(p2[i]*2%m2);
		p3.push_back(p3[i]*2%m3);
	}
	for(auto A:S){
		vector<ll> vis(N,0);
		ll c=0;
		A.push_back(0);
		ll3 s={0,0,0};
		rep(i,N){
			auto dfs=[&](auto&&dfs,ll x)->int{
				if(vis[x])return 0;
				++c;
				vis[x]=1;
				for(ll y:G[x])dfs(dfs,y);
				return 0;
			};
			--c;
			dfs(dfs,A[i]);
			s={(s.a+p1[A[i]])%m1,(s.b+p2[A[i]])%m2,(s.c+p3[A[i]])%m3};
			if(c)T.erase(i);
			else U[i].insert(s);
		}
	}
	ll ans=-1;
	for(ll i:T)if(U[i].size()==1)++ans;
	return ans;
}
#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...