답안 #946263

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
946263 2024-03-14T13:10:41 Z PM1 LOSTIKS (INOI20_lostiks) C++17
36 / 100
727 ms 232512 KB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fr first
#define sc second
const int mxn=1e6+5,sz=(1<<22);
int n,dis[40][40],par[mxn][22],c[mxn],key[25],door[25],cnt=0,d[mxn];
ll dp[sz][25],ans=1e9;
vector<pair<int,int>>v[mxn];
void dfs(int z,int f=0){
	for(int i=1;i<=20;i++)
		par[z][i]=par[par[z][i-1]][i-1];
	for(auto i:v[z]){
		if(par[z][0]!=i.fr){
			par[i.fr][0]=z;
			c[i.fr]=c[z];
			d[i.fr]=d[z]+1;
			if(i.sc){
				door[++cnt]=z;
				key[cnt]=i.sc;
				c[i.fr]|=(1<<(cnt-1));
			}
			dfs(i.fr);
		}
	}
}
int lca(int x,int y){
	if(x==0 || y==0)return 0;
	if(d[x]<d[y])swap(x,y);
	int res=0;
	for(int i=20;i>=0;i--){
		if((1<<i)<=d[x]-d[y])x=par[x][i],res+=(1<<i);
	}
	if(x==y)return res;
	for(int i=20;i>=0;i--){
		if(par[x][i]!=par[y][i])x=par[x][i],y=par[y][i],res+=(1<<(i+1));
	}
	return res+2;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	cin>>door[21]>>key[21];
	for(int i=1;i<n;i++){
		int x,y,w;
		cin>>x>>y>>w;
		v[x].push_back({y,w});
		v[y].push_back({x,w});
	}
	dfs(door[21]);
	for(int i=1;i<=21;i++){
		for(int j=1;j<=21;j++){
			dis[i][j]=lca(door[i],key[j]);
		}
	}
	for(int i=0;i<cnt;i++){
		if(!c[door[i+1]] && !c[key[i+1]])
			dp[(1<<i)][i]=dis[21][i+1]+dis[i+1][i+1];
		else
			dp[(1<<i)][i]=1e9;
	}
	for(int i=1;i<(1<<cnt);i++){
		for(int j=0;j<cnt;j++){
			if(__builtin_popcount(i)!=1)dp[i][j]=1e9;
			if((i&(1<<j)) && (i&c[door[j+1]])==c[door[j+1]] && (i&c[key[j+1]])==c[key[j+1]]) {
				for(int w=0;w<cnt;w++){
					if(i&(1<<w)){
						if(w!=j ){
							dp[i][j]=min(dp[i][j],dis[j+1][j+1]+dis[w+1][j+1]+dp[i-(1<<j)][w]);
							
						}
					}
				}
				if((i&(c[key[21]]))==c[key[21]]){
					ans=min(ans,dp[i][j]+dis[j+1][21]);
				}
			}
		}
	
	}
	if(c[key[21]]==0)ans=dis[21][21];
	assert(ans<1e9);
	cout<<ans;
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27224 KB Output is correct
2 Correct 6 ms 27228 KB Output is correct
3 Correct 55 ms 41292 KB Output is correct
4 Correct 55 ms 41512 KB Output is correct
5 Correct 68 ms 41484 KB Output is correct
6 Correct 70 ms 41448 KB Output is correct
7 Correct 56 ms 41552 KB Output is correct
8 Correct 56 ms 41592 KB Output is correct
9 Correct 55 ms 41636 KB Output is correct
10 Correct 61 ms 41552 KB Output is correct
11 Correct 54 ms 41516 KB Output is correct
12 Correct 61 ms 42800 KB Output is correct
13 Correct 57 ms 42576 KB Output is correct
14 Correct 58 ms 42064 KB Output is correct
15 Runtime error 94 ms 68572 KB Execution killed with signal 6
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27228 KB Output is correct
2 Correct 6 ms 27228 KB Output is correct
3 Correct 6 ms 27260 KB Output is correct
4 Correct 6 ms 27456 KB Output is correct
5 Correct 146 ms 130644 KB Output is correct
6 Correct 124 ms 130788 KB Output is correct
7 Correct 163 ms 130640 KB Output is correct
8 Correct 128 ms 130720 KB Output is correct
9 Correct 141 ms 130652 KB Output is correct
10 Correct 92 ms 130700 KB Output is correct
11 Correct 90 ms 130672 KB Output is correct
12 Correct 91 ms 130640 KB Output is correct
13 Correct 91 ms 130640 KB Output is correct
14 Correct 94 ms 130644 KB Output is correct
15 Correct 130 ms 130644 KB Output is correct
16 Correct 158 ms 130900 KB Output is correct
17 Correct 138 ms 130640 KB Output is correct
18 Correct 99 ms 130848 KB Output is correct
19 Correct 90 ms 130900 KB Output is correct
20 Correct 94 ms 130900 KB Output is correct
21 Correct 97 ms 130900 KB Output is correct
22 Correct 102 ms 131148 KB Output is correct
23 Correct 96 ms 131152 KB Output is correct
24 Correct 95 ms 131152 KB Output is correct
25 Correct 727 ms 232512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 27224 KB Output is correct
2 Correct 6 ms 27228 KB Output is correct
3 Correct 55 ms 41292 KB Output is correct
4 Correct 55 ms 41512 KB Output is correct
5 Correct 68 ms 41484 KB Output is correct
6 Correct 70 ms 41448 KB Output is correct
7 Correct 56 ms 41552 KB Output is correct
8 Correct 56 ms 41592 KB Output is correct
9 Correct 55 ms 41636 KB Output is correct
10 Correct 61 ms 41552 KB Output is correct
11 Correct 54 ms 41516 KB Output is correct
12 Correct 61 ms 42800 KB Output is correct
13 Correct 57 ms 42576 KB Output is correct
14 Correct 58 ms 42064 KB Output is correct
15 Runtime error 94 ms 68572 KB Execution killed with signal 6
16 Halted 0 ms 0 KB -