Submission #483616

#TimeUsernameProblemLanguageResultExecution timeMemory
483616PoPularPlusPlusPaths (BOI18_paths)C++17
100 / 100
334 ms59036 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define pb(e) push_back(e) #define sv(a) sort(a.begin(),a.end()) #define sa(a,n) sort(a,a+n) #define mp(a,b) make_pair(a,b) #define vf first #define vs second #define ar array #define all(x) x.begin(),x.end() const int inf = 0x3f3f3f3f; const int mod = 1000000007; const double PI=3.14159265358979323846264338327950288419716939937510582097494459230; bool remender(ll a , ll b){return a%b;} const int N = 300003; int arr[N]; vector<int> adj[N]; /*ll dfs(int node , int mask){ if(((1 << arr[node]) & mask) > 0)return 0; if(dp[node][mask]!=-1)return dp[node][mask] + 1; ll res = 0; mask += (1 << arr[node]); for(int i : adj[node]){ res += dfs(i , mask); } return (dp[node][mask] = res) + 1; }*/ void solve(){ int n , m , k; cin >> n >> m >> k; ll dp[n + 1][1 << k]; memset(dp,0,sizeof dp); for(int i = 0; i < n; i++){ cin >> arr[i + 1]; arr[i + 1]--; dp[i + 1][1 << arr[i + 1]] = 1; } for(int i = 0; i < m; i++){ int a , b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); } ll ans = 0; for(int mask = 0; mask < (1 << k); mask++){ for(int i = 1; i <= n; i++){ if((mask & (1 << arr[i])) > 0){ int mas = mask ^ (1 << arr[i]); for(int j : adj[i]){ dp[i][mask] += dp[j][mas]; } } ans += dp[i][mask]; } } cout << ans - n << '\n'; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); //int t;cin >> t;while(t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...