QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#116343#6659. 외곽 순환 도로 21kri0 2ms8912kbC++141.7kb2023-06-28 15:43:262024-08-26 15:50:20

Judging History

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

  • [2024-08-26 15:50:20]
  • 管理员手动重测本题所有提交记录
  • 测评结果:0
  • 用时:2ms
  • 内存:8912kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-28 15:44:03]
  • 评测
  • 测评结果:0
  • 用时:3ms
  • 内存:9252kb
  • [2023-06-28 15:43:26]
  • 提交

answer

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cassert>
#include <map>
#define ll long long
#define inf 1000000000000000000ll
using namespace std;
int n,depth[100005];
vector<int> e[100005];
vector<ll> c,w;
int l[100005],r[100005];
int tot,id[100005],o[100005];
ll a[100005];
int m,u[100005],v[100005];
ll val[100005];
void dfs(int now,ll s){
	if (e[now].size()==0){
		l[now]=tot;
		id[tot]=now;
		++tot;
		r[now]=tot;
		u[m]=l[now],v[m]=r[now],val[m]=s;
		m++;
		return;
	}
	l[now]=tot;
	for (int i=0;i<(int)e[now].size();i++)
		if (e[now].size()>1)dfs(e[now][i],c[e[now][i]]);
		else dfs(e[now][i],min(s,c[e[now][i]]));
	r[now]=tot;
	if (now!=0&&e[now].size()>1){
		u[m]=l[now],v[m]=r[now],val[m]=s;
		m++;
	}
	return;
}
int dsu[100005],t[100005];
ll mn[100005];
int dsu_find(int x){
	if (x==dsu[x])return x;
}
ll place_police(vector<int> P, vector<ll> _c, vector<ll> _w){
	n=(int)P.size()+1;
	for (int i=1;i<n;i++)e[P[i-1]].push_back(i),depth[i]=depth[P[i-1]]+1;
	c.resize(n);
	c[0]=inf;
	for (int i=1;i<n;i++)c[i]=_c[i-1]; 
	w=_w;
	dfs(0,inf);
	for (int i=0;i<tot;i++)
		if ((depth[id[i]]&1)==(depth[id[(i+1)%tot]]&1))o[(i+1)%tot]=1,a[(i+1)%tot]=w[i];
		else o[(i+1)%tot]=0,a[(i+1)%tot]=w[i];
	ll ans=inf;
	for (int i=0;i<(1<<m);i++){
		for (int j=0;j<tot;j++)dsu[j]=j,t[j]=o[j],mn[j]=a[j];
		ll s=0;
		for (int j=0;j<m;j++){
			if (!(i&(1<<j)))continue;
			s+=val[j];
			int x=dsu_find(u[j]),y=dsu_find(v[j]);
			if (x!=y){
				t[x]^=t[y],mn[x]=min(mn[x],mn[y]);
				t[y]=mn[y]=0;
				dsu[y]=x;
			} 
		}
		for (int j=0;j<tot;j++)
			if (j==dsu_find(j))
				if (t[j]==1)s+=mn[j];
		ans=min(ans,s);
	}
	return ans;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 6
Accepted
time: 1ms
memory: 8148kb

input:

5
0 452912
0 820899
0 79369
0 232463
1000000000000 1000000000000 1000000000000 1000000000000

output:

532281

result:

ok single line: '532281'

Test #2:

score: 0
Wrong Answer
time: 0ms
memory: 8912kb

input:

6
0 581451
0 68556
0 918465
0 661406
0 41816
1000000000000 1000000000000 1000000000000 1000000000000 1000000000000

output:

1311413

result:

wrong answer 1st lines differ - expected: '1000000110372', found: '1311413'

Subtask #2:

score: 0
Time Limit Exceeded

Test #28:

score: 0
Time Limit Exceeded

input:

99997
0 122727
0 267270
0 846212
0 454122
0 805668
0 614161
0 7805
0 173284
0 684707
0 269129
0 930945
0 1101
0 992427
0 297412
0 759787
0 227130
0 120418
0 90914
0 333684
0 46144
0 519912
0 171490
0 823586
0 121787
0 674177
0 560254
0 753090
0 853359
0 465464
0 655527
0 631303
0 919012
0 597126
0 1...

output:

Unauthorized output

result:


Subtask #3:

score: 0
Wrong Answer

Test #36:

score: 0
Wrong Answer
time: 2ms
memory: 8792kb

input:

11
0 9
0 8
2 0
3 7
3 1
2 6
0 0
7 7
7 1
9 6
1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000

output:

16

result:

wrong answer 1st lines differ - expected: '1', found: '16'

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Time Limit Exceeded

Test #77:

score: 0
Time Limit Exceeded

input:

50311
0 962897543825
1 887020369743
2 363658802934
3 481009844166
4 1099712574
5 858320882162
6 521927434762
7 379344260539
8 73024776148
9 634183458545
10 869560347910
11 81581323331
12 750044298516
13 307013017409
14 306226274039
15 423923546601
16 482114694167
17 849292461119
18 299993045938
19 7...

output:

Unauthorized output

result:


Subtask #6:

score: 0
Skipped

Dependency #1:

0%