关于添加的hack数据
查看原帖
关于添加的hack数据
110009
Soul_Love楼主2024/1/23 10:15

怎么把我卡掉的

#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f3f3f
using namespace std;
int n,m,x,y,z,vis[100100],dis[100100],h[100100],l,cnt[100100],p[100100];
struct edge
{
	int v,w,next,u;
}e[500100];
struct node
{
	int dis,pos;
	bool operator <(const node &x)const
	{
		return x.dis<dis;
	}
};
inline int read()
{
	int k=0,f=0;char c=getchar();
	for(;!isdigit(c);c=getchar()) f|=c=='-';
	for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
	return f?-k:k;
}
inline void add(int x,int y,int z)
{
	e[++l].v=y;
	e[l].u=x;
	e[l].w=z;
	e[l].next=h[x];
	h[x]=l;
}
inline bool spfa(int s)
{
	for(int i=0;i<=n;i++) p[i]=inf;
	p[s]=0;
	queue<int>q;
	q.push(s);
    vis[s]=1;
	cnt[s]++;
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=h[u];i;i=e[i].next)
		{
			if(p[e[i].v]>p[u]+e[i].w)
			{
				p[e[i].v]=p[u]+e[i].w;
				if(!vis[e[i].v])
				{
					q.push(e[i].v);
					cnt[e[i].v]++;
					if(cnt[e[i].v]>=n) return 1;
					vis[e[i].v]=1;
				}
			}
		}
	}
	return 0;
}
inline void dij(int s)
{
	for(int i=1;i<=n;i++) dis[i]=inf,vis[i]=0;
	priority_queue<node> q;
	dis[s]=0;
	q.push((node){0,s});
	while(!q.empty())
	{
		node t=q.top();
		q.pop();
		int k=t.pos;
		if(vis[k]) continue;
		vis[k]=1;
		for(int i=h[k];i;i=e[i].next)
		{
			if(dis[e[i].v]>dis[k]+e[i].w)
			{
				dis[e[i].v]=dis[k]+e[i].w;
				if(!vis[e[i].v]) q.push((node){dis[e[i].v],e[i].v});
			}
		}
	}
}
signed main()
{
	n=read(),m=read();
	for(int i=1;i<=m;i++)
	{
		x=read(),y=read(),z=read();
		add(x,y,z);
	}
	for(int i=1;i<=n;i++) add(0,i,0);
	if(spfa(0))
	{
		printf("-1");
		return 0;
	}
	for(int i=1;i<=l;i++) e[i].w+=p[e[i].u]-p[e[i].v];
	for(int i=1;i<=n;i++)
	{
		int ans=0;
		dij(i);
		for(int j=1;j<=n;j++)
		{
			if(dis[j]==inf) ans+=j*1000000000;
			else ans+=j*(dis[j]+p[j]-p[i]);
		}
		printf("%lld\n",ans);
	}
	return 0;
}
2024/1/23 10:15
加载中...