求助
查看原帖
求助
758211
zhangchenyi0509楼主2024/8/4 18:39
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int y,len;
};
int n,m,t,c[10005],d[10005],ta,tb,tt,e[10005],se[10005],ans;
vector <node> a[10005],b[10005];
bool flag[10005],vis[10005];
priority_queue <pair <int,int>,vector <pair <int,int> >,greater <pair <int,int> > > q;
void dijk (int x)
{
	memset (d,127,sizeof (d));
	d[x]=0;
	q.push (make_pair (0,x));
	while (!q.empty ())
	{
		int td=q.top ().first,ti=q.top ().second;
		q.pop ();
		if (flag[td])
		{
			continue;
		}
		flag[td]=true;
		for (int i=0;i<a[ti].size ();i++)
		{
			if (d[a[ti][i].y]>d[ti]+a[ti][i].len)
			{
				d[a[ti][i].y]=d[ti]+a[ti][i].len;
				q.push (make_pair (d[a[ti][i].y],a[ti][i].y));
			}
		}
	}
}
void tree ()
{
	for (int i=1;i<=n;i++)
	{
		for (int j=0;j<a[i].size ();i++)
		{
			if (d[a[i][j].y]==d[i]+a[i][j].len&&!flag[a[i][j].y])
			{
				flag[a[i][j].y]=true;
				vis[i]=true;
				b[i].push_back (node {a[i][j].y,a[i][j].len});
				b[a[i][j].y].push_back (node {i,a[i][j].len});
			}
		}
	}
}
void dfs (int x)
{
	se[x]=1;
	for (int i=0;i<a[x].size ();i++)
	{
		if (!vis[a[x][i].y])
		{
			continue;
		}
		dfs (a[x][i].y);
		se[x]=se[x]+se[a[x][i].y];
	}
	ans=max (ans,(d[x]-t)*se[x]);
}
int main()
{
	cin>>n>>m>>t;
	for (int i=1;i<=m;i++)
	{
		cin>>ta>>tb>>tt;
		a[ta].push_back (node {tb,tt});
		a[tb].push_back (node {ta,tt});
	}
	dijk (1);
	tree ();
	dfs (1);
	cout<<ans<<endl;
	return 0;
}
2024/8/4 18:39
加载中...