最新消息!木星表面的风暴气旋导致了我的P5201代码五彩斑斓,求大佬帮忙调
  • 板块灌水区
  • 楼主Zq_water
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/7/31 13:35
  • 上次更新2024/7/31 14:51:18
查看原帖
最新消息!木星表面的风暴气旋导致了我的P5201代码五彩斑斓,求大佬帮忙调
895435
Zq_water楼主2024/7/31 13:35

rt

#include<bits/stdc++.h>
#define INF 1e16
#define endl '\n'
#define PI acos(-1)
#define pb push_back
#define int long long
#define mem(x,v) memset(x,v,sizeof x)
using namespace std;
const int N = 1e4+5;
const int M = 1e5+5;
inline int read(){
	register int x=0,f=1;register char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}

int n,m,t,cnt,ans;
int head[N],siz[N],dis[N],vis[N],fl[N],edg[N];
struct Edge{int to,next,w;}edge[M];
void add(int u,int v,int w){edge[++cnt]={v,head[u],w};head[u]=cnt;} 

struct PriQueue{
	int id,dis;
	bool operator <(const PriQueue &x)const{
		return x.dis<dis;
	}
};
priority_queue <PriQueue> q;

void Dijkstra(){
	mem(dis,0x3f),dis[1]=0,q.push({1,0});
	while(!q.empty()){
		int u=q.top().id;q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=edge[i].next){
			int v=edge[i].to,w=edge[i].w;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if(!vis[v])q.push({v,dis[v]});
			}
		}
	}
}
void dfs(int u){
	for(int i=head[u];i;i=edge[i].next){
		if(!edg[i])continue;
		int v=edge[i].to;
		dfs(v),siz[u]+=siz[v];
	}
	ans=max(ans,(dis[u]-t)*siz[u]);
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++)cin>>siz[i];
	for(int i=1,u,v,w;i<=m;i++)cin>>u>>v>>w,add(u,v,w),add(v,u,w);
	Dijkstra();
	for(int u=1;u<=n;u++){
		for(int i=head[u];i;i=edge[i].next){
			int v=edge[i].to,w=edge[i].w;
			if(!fl[v]&&dis[u]+w==dis[v])edg[i]=1,fl[v]=1;
		}
	}
	dfs(1),cout<<ans;
	return 0;
}
2024/7/31 13:35
加载中...