QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#275471#7769. Axium Crisisgrass8cow0 7720ms70088kbC++171.9kb2023-12-04 19:01:312023-12-04 19:01:33

Judging History

你现在查看的是最新测评结果

  • [2023-12-04 19:01:33]
  • 评测
  • 测评结果:0
  • 用时:7720ms
  • 内存:70088kb
  • [2023-12-04 19:01:31]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
int n;
int oi[18][18],wc[18];
vector<int>g[18];
#define pb push_back
vector<int>st[1<<20];
void dfs(int x,int f,int S,int u){
	if(f!=-1)st[u].pb(S);
	for(int v:g[x])if(v!=f){
		int w=oi[x][v];
		if(wc[w]!=1)dfs(v,x,S|(1<<w),u<<1);
		if(wc[w]!=0)dfs(v,x,S|(1<<w),u<<1|1);
	}
}
int js[1<<21],E,le[1<<21],sv[1<<21];
void pr(int x,int d){
	if(d==n)return;
	for(int o:st[x])
		js[++E]=o,le[E]=d,sv[E]=x;
	pr(x<<1,d+1),pr(x<<1|1,d+1);
}
const int I=1e9;
int dp[1<<17][20];
vector<int>o[20];
void ad(int &x,int y){x=max(x,y);}
int jb(int u,int v){
	while(u!=v){
		if(u>v)swap(u,v);
		v>>=1;
	}
	int d=0;
	while(u>1)u>>=1,d++;
	return d;
}
void sol(){
	memset(oi,0,sizeof(oi));
	scanf("%d",&n);
	for(int i=0;i<(1<<n);i++)st[i].clear();
	for(int i=0;i<n;i++)g[i].clear();
	for(int i=0,u,v;i+1<n;i++){
		scanf("%d%d%d",&u,&v,&wc[i]);
		oi[u][v]=oi[v][u]=i;
		g[u].pb(v),g[v].pb(u);
	}
	for(int i=0;i<n;i++)dfs(i,-1,0,1);
	E=0,pr(1,0);n--;
	for(int s=0;s<(1<<n);s++)for(int i=0;i<=n;i++)dp[s][i]=-1;
	for(int i=0;i<=n;i++)o[i].clear();
	dp[0][0]=0,o[0].pb(0);
	for(int i=1;i<=E;i++){
		if(i>1){
			int lc=jb(sv[i],sv[i-1]);
			for(int j=lc+1;j<=n;j++)if(!o[j].empty()){
				for(int so:o[j]){
					if(dp[so][lc]<0)dp[so][lc]=dp[so][j],o[lc].pb(so);
					else ad(dp[so][lc],dp[so][j]);
					dp[so][j]=-1;
				}
				o[j].clear();
			}
		}
		int S=((1<<n)-1)^js[i],s2=S;
		while(1){
			for(int j=0;j<=n;j++)if(dp[s2][j]>=0){
				int zd=dp[s2][j]+le[i]-j;
				if(dp[js[i]|s2][le[i]]<0)dp[js[i]|s2][le[i]]=zd,o[le[i]].pb(js[i]|s2);
				else ad(dp[js[i]|s2][le[i]],zd);
			}
			if(!s2)break;s2=(s2-1)&S;
		}
	}
	int ans=-1;
	for(int s=0;s<(1<<n);s++)for(int i=0;i<=n;i++)ad(ans,dp[s][i]);
	printf("0\n%d\n",ans+1);
}
int main(){
	int T,tt;
	scanf("%d%d",&T,&tt);while(T--)sol();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 6ms
memory: 34648kb

input:

1000 0
4
0 2 0
2 3 0
2 1 0
4
3 2 1
0 2 1
1 2 2
4
0 2 2
0 1 0
3 0 0
4
1 2 1
3 2 0
2 0 1
4
0 2 0
0 3 0
2 1 0
4
0 2 1
0 3 1
0 1 1
4
3 1 0
2 1 2
3 0 2
4
3 1 1
3 0 1
2 3 0
4
1 0 0
2 0 2
2 3 2
4
1 2 0
3 0 0
2 3 2
3
2 1 0
0 2 1
4
3 0 1
1 2 1
2 3 0
4
2 1 0
3 0 1
1 0 1
4
3 2 1
3 1 1
0 1 1
4
1 2 1
1 3 0
3 0 1...

output:

0
3
0
4
0
4
0
4
0
4
0
3
0
4
0
4
0
4
0
4
0
3
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
3
0
4
0
4
0
3
0
4
0
4
0
4
0
3
0
4
0
4
0
4
0
4
0
3
0
4
0
4
0
3
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
3
0
4
0
4
0
3
0
4
0
4
0
4
0
4
0
3
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
4
0
3
0
3
0
4
0
3
0
4
0
4
0
3
0
4
0
4
...

result:

wrong answer Integer 0 violates the range [1, 4]

Subtask #2:

score: 0
Wrong Answer

Test #3:

score: 0
Wrong Answer
time: 9ms
memory: 36244kb

input:

3000 3
4
0 1 1
0 3 1
0 2 0
4
3 2 0
0 1 1
1 2 0
4
1 0 0
2 3 1
3 1 0
4
2 1 0
2 0 1
3 0 0
4
2 3 1
3 0 1
2 1 0
4
2 3 1
2 1 1
2 0 1
4
0 2 0
1 0 0
3 0 0
4
3 1 1
0 2 0
2 3 0
6
4 0 0
3 1 1
2 3 0
0 5 1
1 5 0
4
2 3 1
3 0 0
3 1 1
4
0 3 0
1 2 0
0 2 1
4
0 2 1
3 1 0
2 1 1
4
2 0 0
2 3 1
1 3 0
6
3 1 0
3 4 1
4 0 1
2...

output:

0
4
0
4
0
4
0
4
0
4
0
3
0
3
0
4
0
6
0
4
0
4
0
4
0
4
0
5
0
4
0
4
0
3
0
3
0
4
0
5
0
3
0
3
0
4
0
4
0
5
0
4
0
3
0
4
0
4
0
4
0
3
0
3
0
5
0
4
0
4
0
4
0
4
0
3
0
3
0
4
0
4
0
4
0
5
0
4
0
4
0
4
0
4
0
3
0
4
0
6
0
4
0
4
0
6
0
4
0
4
0
4
0
4
0
4
0
3
0
5
0
4
0
4
0
4
0
3
0
4
0
6
0
4
0
3
0
3
0
4
0
4
0
4
0
4
0
6
0
4
...

result:

wrong answer Integer 0 violates the range [1, 4]

Subtask #3:

score: 0
Skipped

Dependency #1:

0%

Subtask #4:

score: 0
Skipped

Dependency #2:

0%

Subtask #5:

score: 0
Skipped

Dependency #3:

0%

Subtask #6:

score: 0
Skipped

Dependency #4:

0%

Subtask #7:

score: 0
Wrong Answer

Test #13:

score: 0
Wrong Answer
time: 981ms
memory: 46356kb

input:

3000 1
11
2 5 0
10 2 0
6 2 0
2 8 0
0 2 0
2 1 0
2 4 0
2 9 0
2 3 0
7 2 0
11
7 8 0
6 4 0
1 6 0
2 8 0
8 0 0
6 3 0
9 5 0
5 8 0
1 2 0
9 10 0
8
1 4 0
2 3 0
6 5 0
6 7 0
2 4 0
7 3 0
1 0 0
8
4 0 0
0 5 0
7 2 0
0 2 0
0 6 0
0 1 0
0 3 0
11
5 1 0
7 2 0
9 2 0
4 9 0
0 2 0
8 5 0
0 6 0
3 6 0
4 10 0
1 7 0
7
6 2 0
0 5 0...

output:

0
3
0
8
0
8
0
4
0
8
0
7
0
5
0
7
0
11
0
4
0
8
0
4
0
8
0
10
0
5
0
6
0
7
0
5
0
3
0
11
0
6
0
9
0
6
0
6
0
8
0
8
0
5
0
6
0
4
0
5
0
11
0
4
0
5
0
9
0
6
0
9
0
8
0
8
0
4
0
4
0
8
0
11
0
8
0
6
0
4
0
8
0
7
0
4
0
11
0
7
0
7
0
6
0
7
0
8
0
8
0
8
0
6
0
4
0
8
0
8
0
7
0
7
0
8
0
11
0
8
0
5
0
8
0
4
0
7
0
5
0
7
0
7
0
4
0...

result:

wrong answer Integer 0 violates the range [1, 11]

Subtask #8:

score: 0
Wrong Answer

Test #14:

score: 0
Wrong Answer
time: 7720ms
memory: 70088kb

input:

3000 2
8
4 7 2
4 3 2
3 2 2
4 5 2
1 4 2
6 4 2
0 1 2
8
1 5 2
0 7 2
3 2 2
3 1 2
5 7 2
4 0 2
6 4 2
8
1 3 2
5 3 2
7 6 2
2 6 2
0 7 2
4 6 2
0 5 2
8
5 7 2
2 6 2
1 6 2
4 5 2
4 0 2
0 1 2
7 3 2
11
2 7 2
0 9 2
8 9 2
10 7 2
6 9 2
9 3 2
4 10 2
7 5 2
7 9 2
1 9 2
8
2 6 2
1 5 2
4 1 2
1 3 2
6 1 2
0 1 2
6 7 2
14
2 6 2...

output:

0
7
0
8
0
8
0
8
0
9
0
6
0
7
0
6
0
6
0
10
0
8
0
7
0
6
0
6
0
9
0
6
0
7
0
8
0
11
0
8
0
9
0
8
0
8
0
8
0
6
0
7
0
7
0
11
0
6
0
5
0
7
0
8
0
8
0
7
0
6
0
9
0
7
0
7
0
11
0
8
0
7
0
8
0
6
0
7
0
10
0
6
0
8
0
6
0
7
0
7
0
7
0
7
0
8
0
7
0
9
0
11
0
8
0
7
0
7
0
7
0
11
0
8
0
8
0
7
0
6
0
6
0
7
0
8
0
7
0
8
0
7
0
6
0
7
0...

result:

wrong answer Integer 0 violates the range [1, 8]

Subtask #9:

score: 0
Skipped

Dependency #6:

0%

Subtask #10:

score: 0
Skipped

Dependency #5:

0%