QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#300103#3275. 小明的树mazihang20220 501ms93524kbC++144.0kb2024-01-07 17:55:582024-01-07 17:55:59

Judging History

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

  • [2024-01-07 17:55:59]
  • 评测
  • 测评结果:0
  • 用时:501ms
  • 内存:93524kb
  • [2024-01-07 17:55:58]
  • 提交

answer

#include<bits/stdc++.h>

#define ll long long

#define int long long

#define fir first

#define sec second

#define pii pair<int,int>

#define isz(v) (int)(v.size())

using namespace std;



const int maxn=500005;

const int inf=0x3f3f3f3f3f3f3f3f;



namespace Solve {

	struct Val {

		int x,y,ans;

		Val operator + (const Val &rhs) const {

			return {min(x,rhs.x),min(y,rhs.y),ans+rhs.ans};

		}

	};

	struct Tag {

		int x,y,t,d;

		Tag operator + (const Tag &rhs) const {

			return {x+rhs.x,y+rhs.y,t+rhs.t,d+rhs.d-t*rhs.x};

		}

	};

	struct ST {

		struct Node {

			int l,r;

		} a[maxn*4];

		Val val[maxn*4];

		Tag tag[maxn*4];

		void pushup(int x) {

			val[x]=val[x*2]+val[x*2+1];

		}

		void spread(int x,Tag t) {

			val[x].x+=t.x;

			val[x].y+=t.y;

			val[x].ans+=val[x].x*t.t+t.d;

			tag[x]=tag[x]+t;

		}

		void pushdown(int x) {

			int p=val[x*2].y,q=val[x*2+1].y;

			if(p<=q) {

				spread(x*2,tag[x]);

			} else {

				Tag t=tag[x];

				t.t=t.d=0;

				spread(x*2,t);

			}

			if(p>=q) {

				spread(x*2+1,tag[x]);

			} else {

				Tag t=tag[x];

				t.t=t.d=0;

				spread(x*2+1,t);

			}

			tag[x]={};

		}

		void build(int l,int r,int k=1) {

			a[k]={l,r};

			tag[k]={};

			if(l==r) {

				val[k]={0,1,0};

				return ;

			}

			int mid=(l+r)>>1;

			build(l,mid,k*2);

			build(mid+1,r,k*2+1);

			pushup(k);

		}

		void update(int l,int r,Tag t,int k=1) {

			if(a[k].r<l||a[k].l>r) {

				return ;

			}

			if(l<=a[k].l&&a[k].r<=r) {

				spread(k,t);

				return ;

			}

			pushdown(k);

			update(l,r,t,k*2);

			update(l,r,t,k*2+1);

			pushup(k);

		}

		void dfs(int k=1) {

			if(a[k].l==a[k].r) {

				cout<<val[k].ans<<"\n";

				return ;

			}

			pushdown(k);

			dfs(k*2);

			dfs(k*2+1);

		}

		void print(int k=1) {

			cerr<<val[k].x<<" "<<val[k].y<<" "<<val[k].ans<<"\n";

			if(a[k].l==a[k].r) {

				return ;

			}

			pushdown(k);

			print(k*2);

			print(k*2+1);

		}

	} seg;

	int a[maxn];

	int p[maxn];

	vector<pii> v1[maxn];

	vector<pii> v2[maxn];

	void clear() {

		

	}

	void add(int x,int y,int l,int r) {

		if(p[x]>p[y]) {

			swap(x,y);

		}

		// cerr<<x<<" "<<y<<": "<<l<<" "<<r<<"\n";

		v1[p[x]].push_back({l,r});

		v2[p[y]].push_back({l,r});

	}

	void main(int tid) {

		int n,m;

		cin>>n>>m;

		map<pii,int> t;

		for(int i=1;i<=n-1;i++) {

			int x,y;

			cin>>x>>y;

			if(x>y) {

				swap(x,y);

			}

			t[{x,y}]=0;

		}

		for(int i=1;i<=n-1;i++) {

			cin>>a[i];

			p[a[i]]=i;

		}

		p[1]=n;

		for(int i=1;i<=m;i++) {

			int x,y;

			cin>>x>>y;

			if(x>y) {

				swap(x,y);

			}

			add(x,y,t[{x,y}],i-1);

			t[{x,y}]=-1;

			cin>>x>>y;

			if(x>y) {

				swap(x,y);

			}

			t[{x,y}]=i;

		}

		for(auto p:t) {

			if(p.sec==-1) {

				continue;

			}

			pii r=p.fir;

			add(r.fir,r.sec,p.sec,m);

		}return ;

		seg.build(0,m);

		for(int i=1;i<=n-1;i++) {

			seg.update(0,m,{1,-1});

			for(pii p:v1[i]) {

				// cerr<<"?\n";

				seg.update(p.fir,p.sec,{0,1});

			}

			for(pii p:v2[i]) {

				seg.update(p.fir,p.sec,{-1,0});

			}

			if(seg.val[1].y==1) {

				seg.update(0,m,{0,0,1});

			}

			// seg.print();

			// cerr<<"-----\n";



			// cerr<<seg.val[1].x<<" "<<seg.val[1].y<<" "<<seg.val[1].ans<<"\n";

		}

		seg.dfs();

	}

	void init() {

		

	}

}



signed main() {

#ifndef ONLINE_JUDGE

	freopen("data.in","r",stdin);

	freopen("mine.out","w",stdout);

#endif

	ios::sync_with_stdio(false);

	cin.tie(0),cout.tie(0);

	int T=1;

//	cin>>T;

	Solve::init();

	for(int t=1;t<=T;t++) {

		Solve::main(t);

		Solve::clear();

	}

#ifndef ONLINE_JUDGE

	cerr<<"Time: "<<(1.0*clock()/CLOCKS_PER_SEC)*1000<<"ms\n";

#endif

}


Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 501ms
memory: 93524kb

input:

500000 0
2 1
3 2
4 2
5 4
6 1
7 1
8 4
9 3
10 9
11 3
12 8
13 5
14 7
15 10
16 10
17 13
18 14
19 18
20 14
21 13
22 3
23 2
24 2
25 10
26 19
27 13
28 16
29 7
30 11
31 13
32 28
33 30
34 10
35 26
36 5
37 34
38 20
39 7
40 35
41 30
42 11
43 40
44 10
45 5
46 23
47 15
48 23
49 16
50 5
51 13
52 23
53 47
54 3
55 ...

output:


result:

wrong answer Answer contains longer sequence [length = 1], but output contains 0 elements

Subtask #2:

score: 0
Wrong Answer

Test #2:

score: 0
Wrong Answer
time: 8ms
memory: 32696kb

input:

8000 8000
2 1
3 2
4 1
5 4
6 3
7 4
8 3
9 3
10 8
11 6
12 7
13 11
14 11
15 7
16 4
17 11
18 7
19 8
20 19
21 18
22 17
23 2
24 15
25 23
26 13
27 10
28 1
29 7
30 17
31 11
32 18
33 2
34 1
35 29
36 5
37 21
38 6
39 7
40 26
41 19
42 3
43 9
44 39
45 23
46 41
47 38
48 12
49 4
50 30
51 1
52 41
53 17
54 41
55 53
5...

output:


result:

wrong answer Answer contains longer sequence [length = 8001], but output contains 0 elements

Subtask #3:

score: 0
Skipped

Dependency #1:

0%