标签:
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
///1085422276 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<queue> #include<cmath> #include<map> #include<bitset> #include<set> #include<vector> using namespace std ; typedef long long ll; #define push_back pb #define mem(a) memset(a,0,sizeof(a)) #define TS printf("111111\n"); #define FOR(i,a,b) for( int i=a;i<=b;i++) #define FORJ(i,a,b) for(int i=a;i>=b;i--) #define READ(a) scanf("%d",&a) #define mod 1000000007 #define inf 100000 #define maxn 300000 inline ll read() { ll x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘)f=-1; ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘) { x=x*10+ch-‘0‘; ch=getchar(); } return x*f; } //****************************************************************** struct ss { int to,next,v; }e[500001]; int vis[200005],head[200005],t,n; ll hashs[500005]; void add(int u,int v,int w) { ss kk={v,head[u],w}; e[t]=kk; head[u]=t++; } void dfs(int x,int pre) { hashs[pre]++; vis[x]=1; for(int i=head[x];i;i=e[i].next) {//TS; if(vis[e[i].to])continue; dfs(e[i].to,pre^e[i].v); } } int main() { int a,b,c; int T=read(); while(T--) { t=1;mem(head);mem(hashs);mem(vis); n=read(); FOR(i,1,n-1) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } //cout<<t<<endl; dfs(1,0); /// FOR(i,0,3)cout<<hashs[i]<<" "; int q=read(); FOR(i,1,q) { ll ans=0; a=read(); for(int j=0;j<=maxn;j++) {if(!hashs[j])continue; if((a^j)==j)ans+=(hashs[j]*(hashs[j]-1)); else { ans+=(hashs[j]*hashs[a^j]); } //if(ans!=0)cout<<j<<" "<<ans<<endl; }ans=ans/2; if(a==0)ans+=n; cout<<ans<<endl; } } return 0; }
标签:
原文地址:http://www.cnblogs.com/zxhl/p/4781954.html