Submission #895636

#TimeUsernameProblemLanguageResultExecution timeMemory
895636pccPaths (BOI18_paths)C++14
100 / 100
323 ms84820 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> const int mxn = 3e5+10; ll dp[33][mxn]; ll N,M,K; int col[mxn]; vector<int> paths[mxn]; inline ll calc(int mask){ ll re = 0; for(int i = 1;i<=N;i++){ re += dp[mask][i]; for(auto &nxt:paths[i]){ if(mask&(1<<col[nxt]))continue; dp[mask^(1<<col[nxt])][nxt] += dp[mask][i]; } } return re; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>N>>M>>K; for(int i = 1;i<=N;i++){ cin>>col[i]; col[i]--; dp[1<<col[i]][i] = 1; } for(int i = 0;i<M;i++){ int a,b; cin>>a>>b; paths[a].push_back(b); paths[b].push_back(a); } ll ans = 0; for(int i = 1;i<(1<<K);i++){ ll re = calc(i); if(__builtin_popcount(i)>1)ans += re; } 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...