4253 2023. 03. 19 17:51:57 horvathabel Társaság (50) cpp17 Hibás válasz 3/50 500ms 5176 KiB
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>> g[10001];
pair<int, int> p[10001];
vector<int> t;
int ans=0; 
vector<bool> seen;
int bfsmx(int x){
	queue<int> q; 
	q.push(x);
	int t[10001];
	t[x]=0; 
	int mx=0;
	while (!q.empty()){
		int v=q.front();
		q.pop(); 
		for (auto edge:g[v]) {
			t[edge.first]=t[v]+edge.second; 
			mx=max(t[edge.first], mx);
			q.push(edge.first);
		}
	}
	return mx; 
}  
void dfs(int x, int m){
	seen[x]=true;
	if (p[x].first!=-1){
	if (t[x]+p[x].second>m){
		t[x]=0;
		ans++;	
	}
	t[p[x].first]=t[x]+p[x].second; 
	if (!seen[p[x].first]) dfs(p[x].first, m);
}
}
int main() {
	int n, k;
	cin>>n>>k;
	vector<int> cn;
	cn.assign(n+1, 0);
	for (int i=2; i<=n;i++){
		int x,y;
		cin>>x>>y;
		g[x].push_back({i,y});
		p[i]={x,y};
		cn[x]++;
	}
	vector<int> nulla; 

	for (int i=1;i<=n;i++){
		if (cn[i]==0) nulla.push_back(i);  
	}
	p[1]={-1,-1};
	int l=0; 
	int r=bfsmx(1);
	int mego;
	while (l+1<r){
		int m=(l+r)/2;
		seen.assign(n+1, false);
		t.assign(10001,10e9); 
		for (int x: nulla){
			t[x]=0; 
			dfs(x,m);
			
		}
		if (ans<=k){
			mego=m; 
			r=m;
		}
		else{
			l=m; 
		}
		ans=0; 
		t.clear();
		seen.clear();
	}
	cout<<mego; 

}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 3/50
1 Elfogadva 0/0 3ms 2512 KiB
2 Hibás válasz 0/0 8ms 3120 KiB
3 Elfogadva 3/3 3ms 3028 KiB
4 Hibás válasz 0/3 3ms 3340 KiB
5 Hibás válasz 0/3 3ms 3556 KiB
6 Hibás válasz 0/3 3ms 3772 KiB
7 Hibás válasz 0/3 3ms 3776 KiB
8 Hibás válasz 0/3 4ms 3840 KiB
9 Hibás válasz 0/3 4ms 3916 KiB
10 Hibás válasz 0/3 6ms 4204 KiB
11 Hibás válasz 0/3 7ms 4204 KiB
12 Hibás válasz 0/3 9ms 4488 KiB
13 Hibás válasz 0/4 10ms 4600 KiB
14 Hibás válasz 0/4 10ms 4904 KiB
15 Időlimit túllépés 0/4 474ms 3720 KiB
16 Hibás válasz 0/4 14ms 5176 KiB
17 Időlimit túllépés 0/4 500ms 3880 KiB