第一个点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;
}
留下记录以帮助后人