제출 #927219

#제출 시각아이디문제언어결과실행 시간메모리
927219vjudge1Paths (BOI18_paths)C++17
100 / 100
485 ms85840 KiB
#include <bits/stdc++.h> using namespace std; #define all(a) a.begin(),a.end() #define pb push_back #define vt vector #define endl '\n' typedef long long ll; const ll mod=1e9+7; const ll inf=1e9+7; const int N=3e5+4; int n,m,k,a[N],used[N]; ll res=0; ll dp[(1<<6)][N]; vt<int>g[N]; void solve(){ cin>>n>>m>>k; for(int i=1; i<=n; ++i) { cin>>a[i]; a[i]--; dp[(1<<a[i])][i]=1; } for(int i=1; i<=m; ++i){ int u,v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } for(int mask=0; mask<(1<<k); ++mask){ for(int v=1; v<=n; ++v){ for(int to:g[v]){ if(a[to]!=a[v] && ((mask>>a[to])&1)==0) dp[mask|(1<<a[to])][to]+=dp[mask][v]; } } } ll ans=0; for(int mask=1; mask<(1<<k); ++mask){ for(int v=1; v<=n; ++v){ ans+=dp[mask][v]; } } cout<<ans-n<<endl; } int main(){ int tt=1; //cin>>tt; while(tt--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...