Submission #1150282

#TimeUsernameProblemLanguageResultExecution timeMemory
1150282dobri_okePaths (BOI18_paths)C++17
23 / 100
3109 ms563600 KiB
#pragma GCC target ("avx2")   
#pragma GCC optimize ("Ofast")   
#include <bits/stdc++.h>   
using namespace std;  
#define int long long  
#define F first 
#define S second 
#define pb push_back 
const int N = 1e6+100, NN = 26;
const int mod = 1e9+7;
vector < int > g[N];
int a[N], cnt=0;
vector < int > vr;
map < vector < int >, int > mp;
bool was[N];
void dfs(int v, vector < int > z , vector < int > l, int p){
    was[v]=1;
    vr.pb(v);
    z.pb(v);
    l[a[v]]=1;
    for(auto to : g[v]){
        if(was[to]) continue;
        if(l[a[to]]==0){
            dfs(to, z, l, p);
        }
    }
    was[v]=0;
    if(p!=v){
        if(mp[z]==0){
            mp[z]=1;
            cnt++;
        }
    }
}
//int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
//int lcm(int a, int b) { return a / gcd(a, b) * b; }
//int binpow(int a,int b){if(!b)return 1; if(b&1)return a*binpow(a,b-1)%mod; int x=binpow(a,b/2); return x*x%mod;}
signed main(){   
    ios_base::sync_with_stdio(0);   
    cin.tie(0);   
    cout.tie(0);
    int n, m, k;
    cin >> n >> m >> k;
    for(int i=1;i<=n;i++) cin >> a[i];
    for(int i=1;i<=m;i++){
        int u, v;
        cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }
    int ans=0;
    vector < int > vv={0, 0, 0, 0, 0, 0, 0, 0};
    vector < int > gg={};
    for(int i=1;i<=n;i++){
        dfs(i, gg, vv, i);
        ans+=cnt;
        cnt=0;
        for(auto to : vr) was[to]=0;
        vr.clear();
    }
    cout << 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...