Submission #13014638
Source Code Expand
#include <bits/stdc++.h>
#define int long long
#define uint unsigned int
#define ld long double
#define showoff ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pb push_back
#define pii pair<int,int>
#define FOR(i,a,b) for(int i=a;i<b;++i)
#define RFOR(i,a,b) for(int i=a;i>b;--i)
#define f first
#define se second
#define maxn 200005
#define all(v) v.begin(),v.end()
#define sz(x) (int)x.size()
#define mod 1000000007
#define pqueue priority_queue<pii>
#define pdqueue priority_queue< int,vector<int> ,greater< int >>
using namespace std;
// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// int power(int a,int n)
// {
// a %= mod;
// if(n == 1)return a;
// if(n == 0)return 1;
// if(n%2)return (a*(power((a*a)%mod,n/2)%mod))%mod;
// return power((a*a)%mod,n/2)%mod;
// }
// const int inf = (int) 1e18;
// int inverse(int x){
// return power(x,mod-2)%mod;//little fermat....
// }
int n,lca[60][60],dp[(1<<20)+5][25];
vector<int>sub[60],mask(60),v1((1<<20)+5),v2((1<<20)+5);
vector<pii>adj[60],con(30),par(60);
void dfs(int x,int p){
sub[x].pb(x);
for(auto &y:adj[x]){
if(y.f != p){
par[y.f] = {x,y.se};
dfs(y.f,x);
for(auto &u:sub[y.f]){
for(auto &v:sub[x]){
lca[u][v] = x;
lca[v][u] = x;
}
}
for(auto &u:sub[y.f]){
sub[x].pb(u);
}
}
}
}
void solve(){
int n;
cin >> n;
FOR(i,0,n-1){
int u,v;
cin >> u >> v;
adj[u].pb({v,i});
adj[v].pb({u,i});
}
par[1] = {1,-1};
dfs(1,1);
int m;
cin >> m;
FOR(i,0,m){
cin >> con[i].f >> con[i].se;
int l = lca[con[i].f][con[i].se];
int u = con[i].f,v = con[i].se;
while(u != l){
mask[par[u].se] |= (1<<i);
u = par[u].f;
}
while(v != l){
mask[par[v].se] |= (1<<i);
v = par[v].f;
}
}
n--;
int half = n/2;
FOR(i,0,(1<<half)){
int tmp_mask = 0;
FOR(j,0,half){
if(i&(1<<j))tmp_mask |= mask[j];
}
v1[tmp_mask]++;
}
FOR(i,0,1<<(n-half)){
int tmp_mask = 0;
FOR(j,0,n-half){
if(i&(1<<j))tmp_mask |= mask[half+j];
}
v2[tmp_mask]++;
}
FOR(i,0,(1<<20)){
if(1&i)dp[i][0] = v2[i]+v2[i^1];
else dp[i][0] = v2[i^1];
}
FOR(i,1,20){
FOR(j,0,(1<<20)){
dp[j][i] = dp[j^(1<<i)][i-1];
if(j&(1<<i))dp[j][i] += dp[j][i-1];
}
}
long long ans = 0;
FOR(i,0,(1<<20))ans += (long long )(v1[i]*dp[i][m-1]);
cout << ans;
}
signed main()
{
showoff;
int T = 1;
//cin >> T;
FOR(t,1,T+1){
solve();
cout << "\n";
}
return 0;
}
//*->for large size of matrix take int not long long if possible......
//*->always take maximum as inf for safer side ...
Submission Info
| Submission Time |
|
| Task |
F - Tree and Constraints |
| User |
MonsterInMe |
| Language |
C++14 (GCC 5.4.1) |
| Score |
600 |
| Code Size |
3264 Byte |
| Status |
AC |
| Exec Time |
3867 ms |
| Memory |
221568 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
| All |
dense_01.txt, dense_02.txt, dense_03.txt, dense_04.txt, dense_05.txt, large_ans.txt, line_01.txt, line_02.txt, line_03.txt, no_overlap.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, star_01.txt, star_02.txt, star_03.txt |
| Case Name |
Status |
Exec Time |
Memory |
| dense_01.txt |
AC |
390 ms |
221440 KiB |
| dense_02.txt |
AC |
391 ms |
221440 KiB |
| dense_03.txt |
AC |
387 ms |
221440 KiB |
| dense_04.txt |
AC |
388 ms |
221440 KiB |
| dense_05.txt |
AC |
393 ms |
221440 KiB |
| large_ans.txt |
AC |
3864 ms |
221440 KiB |
| line_01.txt |
AC |
2086 ms |
221440 KiB |
| line_02.txt |
AC |
3867 ms |
221440 KiB |
| line_03.txt |
AC |
3863 ms |
221440 KiB |
| no_overlap.txt |
AC |
3866 ms |
221568 KiB |
| random_01.txt |
AC |
1210 ms |
221440 KiB |
| random_02.txt |
AC |
2087 ms |
221440 KiB |
| random_03.txt |
AC |
924 ms |
221440 KiB |
| random_04.txt |
AC |
2085 ms |
221440 KiB |
| random_05.txt |
AC |
2651 ms |
221440 KiB |
| random_06.txt |
AC |
2649 ms |
221440 KiB |
| random_07.txt |
AC |
923 ms |
221568 KiB |
| random_08.txt |
AC |
920 ms |
221440 KiB |
| random_09.txt |
AC |
1488 ms |
221440 KiB |
| random_10.txt |
AC |
2663 ms |
221440 KiB |
| sample_01.txt |
AC |
389 ms |
221440 KiB |
| sample_02.txt |
AC |
388 ms |
221440 KiB |
| sample_03.txt |
AC |
388 ms |
221440 KiB |
| sample_04.txt |
AC |
388 ms |
221440 KiB |
| star_01.txt |
AC |
1214 ms |
221440 KiB |
| star_02.txt |
AC |
1216 ms |
221440 KiB |
| star_03.txt |
AC |
1481 ms |
221440 KiB |