Submission #696668

#TimeUsernameProblemLanguageResultExecution timeMemory
696668bachhoangxuanŠarenlist (COCI22_sarenlist)C++17
110 / 110
22 ms332 KiB
// Judges with GCC >= 12 only needs Ofast // #pragma GCC optimize("O3,no-stack-protector,fast-math,unroll-loops,tree-vectorize") // MLE optimization // #pragma GCC optimize("conserve-stack") // Old judges // #pragma GCC target("sse4.2,popcnt,lzcnt,abm,mmx,fma,bmi,bmi2") // New judges. Test with assert(__builtin_cpu_supports("avx2")); // #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native") // Atcoder // #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma") #include<bits/stdc++.h> using namespace std; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_real_distribution<> pp(0.0,1.0); #define int long long #define ld long double #define pii pair<int,int> #define piii pair<int,pii> #define fi first #define se second const int inf=1e18; const int mod=1e9+7; const int maxn=105; const int maxq=500005; const int maxl=20; const int maxa=1000005; int power(int a,int n){ int res=1; while(n){ if(n&1) res=res*a%mod; a=a*a%mod;n>>=1; } return res; } vector<pii> edge[maxn]; vector<int> x[maxn]; int n,m,k; bool dfs(int u,int par,int s,int id){ bool ok=(u==s); for(pii v:edge[u]){ if(v.first==par) continue; if(dfs(v.first,u,s,id)){ x[id].push_back(v.second); ok=true; } } return ok; } int cnt=0,par[maxn],r[maxn]; int findpar(int u){ if(u!=par[u]) return par[u]=findpar(par[u]); return u; } void unions(int u,int v){ u=findpar(u);v=findpar(v); if(u==v) return; if(r[u]<r[v]) swap(u,v); par[v]=u;r[u]+=r[v];cnt--; } void add(int p){ for(int j=0;j<(int)x[p].size()-1;j++) unions(x[p][j],x[p][j+1]); } void solve(){ cin >> n >> m >> k; for(int i=1;i<n;i++){ int u,v;cin >> u >> v; edge[u].push_back({v,i}); edge[v].push_back({u,i}); } for(int i=0;i<m;i++){ int u,v;cin >> u >> v; dfs(u,0,v,i); } int ans=0; for(int i=0;i<(1<<m);i++){ cnt=n-1; for(int j=1;j<n;j++){par[j]=j;r[j]=1;} for(int j=0;j<m;j++){ if(i&(1<<j)) add(j); } if(__builtin_popcount(i)&1) ans=(ans-power(k,cnt)+mod)%mod; else ans=(ans+power(k,cnt))%mod; } cout << ans << '\n'; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int test=1;//cin >> test; while(test--) 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...
#Verdict Execution timeMemoryGrader output
Fetching results...