注意不要用Dijkstra!
注意不要用Dijkstra!!
注意不要用Dijkstra!!!
因为有负权边
#include #include #include #include #include using namespace std;int n,m,value[100005],head[500005],dis[500005],vis[500005],cnt;struct edge{ int v,w,next;}e[5000005];inline void add(int u,int v,int w){ e[++cnt].v=v; e[cnt].w=w; e[cnt].next=head[u]; head[u]=cnt;}inline void emm(int x,int y){ add(x,y,0);add(x+n,y+n,0);add(x+2*n,y+2*n,0); add(x,y+n,-value[x]); add(x+n,y+2*n,value[x]);}inline void spfa(){ memset(dis,-0x3f,sizeof(dis)); queue q; q.push(1); dis[1]=0; while(!q.empty()){ int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; if(dis[v] q; dis[1]=0; q.push((node){0,1}); while(!q.empty()){ int x=q.top().u; q.pop(); if(vis[x])continue; vis[x]=1; for(int i=head[x];i!=-1;i=e[i].next){ int y=e[i].v; if(dis[y]