WA求调,回复必关注
查看原帖
WA求调,回复必关注
305735
Jean_Gunnhildr楼主2024/11/24 14:19

WA了2、3、5、15

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;

int v,s,uu,vv,cnt,mid,d[N],ans;
vector<int> e[N];

void dfs(int pos,int fa){
	if(cnt>s) return ;
	priority_queue<int,vector<int>,less<int> > q;
	for(int i:e[pos]){
		if(i==fa) continue;
		dfs(i,pos);
		q.push(d[i]);
	}
	if(q.size()==0) return ;
	while(!q.empty()){
		int h=q.top();
		q.pop();
		if(h>mid-1){
			cnt++;
			continue;
		}
		else{
			if( q.empty() ){
				d[pos]=h+1;
				return ;
			}
			else{
				if(q.top()+h+2>mid){
					cnt++;
					continue;
				}
			}
		}
	}
	return ;
}

int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>v>>s;
	for(int i=1;i<=v-1;i++){
		cin>>uu>>vv;
		e[uu].push_back(vv);
		e[vv].push_back(uu);
	}
	if(s>=v-1){
		cout<<0<<"\n";
		return 0;
	}
	int l=1,r=v-1;
	while(l<=r){//二分答案
		cnt=0;
		memset(d,0,sizeof(d));
		mid=(l+r)>>1;
		dfs(1,0);
		if(cnt<=s){
			ans=mid;
			r=mid-1;
		}
		else{
			l=mid+1;
		}
	}
	cout<<ans<<"\n";
	return 0;
}

错误样例

100 7
4 60
95 71
88 91
20 100
58 57
47 25
11 75
66 55
56 90
28 79
22 47
5 75
66 26
99 63
33 2
23 27
73 10
17 44
62 74
52 8
50 62
34 92
57 52
47 12
41 74
90 14
73 94
88 90
71 87
52 3
40 74
29 12
36 45
8 97
70 59
56 20
73 42
63 29
93 61
92 85
87 82
98 59
27 38
100 98
76 51
52 15
77 81
79 64
77 86
60 99
96 67
60 32
100 52
93 92
88 31
73 38
41 51
75 40
48 50
64 66
84 42
79 40
58 27
46 18
11 46
22 55
37 61
85 9
98 25
11 72
62 89
23 45
30 3
4 61
43 14
87 53
22 54
8 65
4 44
25 1
68 36
25 83
88 7
51 67
12 6
71 65
48 80
16 77
19 18
82 39
21 2
69 10
9 33
78 4
33 13
16 2
5 35
49 24
24 46

正确答案 88

我的答案 55

2024/11/24 14:19
加载中...