求助,90分代码
查看原帖
求助,90分代码
177069
李白莘莘学子楼主2020/11/29 08:44

第一个点WA了。无数据。

求大佬帮助。

#include<iostream>
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#define ll long long
#define N 1207
using namespace std;
int read()
{
	int ans=0;
	char ch=getchar(),last=' ';
	while(ch>'9'||ch<'0')last=ch,ch=getchar();
	while(ch>='0'&&ch<='9')ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
	return last=='-'?-ans:ans;
}
struct edg{
	int nex,to,dis;
}edge[N<<1];
int hea[N],num,n,m,dis[N],d,u,f,v,w,vis[N],cnt[N],ans=1e9;
inline void add(int from,int to,int dis)
{
	num++;
	edge[num].dis=dis;edge[num].to=to;
	edge[num].nex=hea[from];
	hea[from]=num;
}
inline bool spfa()
{
	queue<int> q;
	memset(dis,0x3f,sizeof(dis));
	dis[n+1]=0;
	vis[n+1]=1;
	q.push(n+1);
	while(!q.empty())
	{
		int now=q.front();
		q.pop();
		vis[now]=0;
		for(int i=hea[now];i;i=edge[i].nex)
		{
			int v=edge[i].to;
			if(dis[v]>dis[now]+edge[i].dis)
			{
				dis[v]=dis[now]+edge[i].dis;
				if(!vis[v])
				{
					q.push(v);
					cnt[v]++;
					vis[v]=1;
				}
			}
			if(cnt[v]>=n)
			{
				return 1;
			}
		}
	}return 0;
}
int main(){
	d=read(),m=read(),n=read(),f=read();
	for(int i=1;i<=m;i++)
	{
		u=read(),v=read();
		add(u,v,-d);	
	}
	for(int i=1;i<=f;i++)
	{
		u=read(),v=read(),w=read();
		add(u,v,w-d);
	}
	for(int i=1;i<=n;i++)
	{
		add(n+1,i,-d);
	}//c+1是超级源点
	if(spfa())
	{
		printf("orz\n");
		return 0;
	}
	for(int i=1;i<=n;i++)
	{
		ans=min(ans,dis[i]);
	}
	printf("%d\n",-ans);
	return 0;
}

留下记录以帮助后人

2020/11/29 08:44
加载中...