제출 #1213600

#제출 시각아이디문제언어결과실행 시간메모리
1213600Muhammad_AneeqPaths (RMI21_paths)C++20
컴파일 에러
0 ms0 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
#define int long long
int const N=1e5+10;
vector<pair<int,int>>nei[N];
multiset<long long>*vl[N]={};
long long dist[N]={};
long long dp[N][2]={};
long long ans[N]={};
int lv=0;
void dfs(int u,int p=0)
{
	bool w=1;
	for (auto [i,c]:nei[u])
	{
		if (i==p) continue;
		w=0;
		dist[i]=dist[u]+c;
		dfs(i,u);
	}
	vl[u]=new multiset<long long>();
	if (w)
		(*vl[u]).insert(dist[u]-dist[p]);
	else
	{
		int v=-1,sz=0;
		for (auto [i,c]:nei[u])
		{
			if (i==p) continue;
			if ((*vl[i]).size()>sz)
			{
				sz=(*vl[i]).size();
				v=i;
			}
		}
		vl[u]=vl[v];
		for (auto [i,c]:nei[u])
		{
			if (i==v||i==p) continue;
			for (auto j:(*vl[i]))
				(*vl[u]).insert(j);
		}
		long long z=*rbegin(*vl[u]);
		(*vl[u]).erase((*vl[u]).find(z));
		z+=dist[u]-dist[p];
		(*vl[u]).insert(z);
	}
}
void ud(int u,int p=0)
{
	for (auto [i,c]:nei[u])
	{
		if (i==p) continue;
		if (dp[u][0]<dp[i][0]+c)
		{
			dp[u][1]=dp[u][0];
			dp[u][0]=dp[i][0]+c;
		}
		else if (dp[u][1]<dp[i][0]+c)
			dp[u][1]=dp[i][0]+c;
	}
}
void bt(int u,long long vl=0,int p=0)
{
	ans[u]=max(dp[u][0],vl);
	for (auto [i,c]:nei[u])
	{
		if (i==p) continue;
		long long mx=vl;
		if (dp[u][0]==dp[i][0]+c)
			mx=max(mx,dp[u][1]);
		else
			mx=max(mx,dp[u][0]);
		bt(i,mx+c,u);
	}
}
inline void solve()
{
	int n,k;
	cin>>n>>k;
	for (int i=1;i<n;i++)
	{
		int u,v,c;
		cin>>u>>v>>c;
		nei[u].push_back({v,c});
		nei[v].push_back({u,c});
	}
	if (k==1)
	{
		ud(1);
		bt(1);
		for (int i=1;i<=n;i++)
			cout<<ans[i]<<endl;
		return;
	}
	for (int i=1;i<=n;i++)
	{
		dist[i]=0;
		dfs(i);
		int z=min(int((*vl[i]).size()),k);
		long long ans=0;
		while (z--)
		{
			long long f=*rbegin(*vl[i]);
			(*vl[i]).erase((*vl[i]).find(f));
			ans+=f;
		}
		cout<<ans<<endl;
	}
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'void solve()':
Main.cpp:6:13: error: expected primary-expression before 'long'
    6 | #define int long long
      |             ^~~~
Main.cpp:103:27: note: in expansion of macro 'int'
  103 |                 int z=min(int((*vl[i]).size()),k);
      |                           ^~~