P1073 最优贸易

来源:互联网 发布:html css js注释 编辑:程序博客网 时间:2024/05/16 15:03
逼我爆粗口。洛谷上数不清的题解,没有一个把spfa写对的,这些傻逼有什么资格发题解!
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define ll long long#define db double#define mkp(x,y) make_pair(x,y)#define pii pair<int,int>#define X first#define Y secondconst int N=100005,M=1000005,inf=101;int n,m,V[N];int to[M],ne[M],tot,he[N],to2[M],ne2[M],tot2,he2[N];void add(int x,int y){to[++tot]=y;ne[tot]=he[x];he[x]=tot;}void add2(int x,int y){to2[++tot2]=y;ne2[tot]=he2[x];he2[x]=tot2;}int q[N],Max,Min[N];bool inq[N];void spfa(){int Ft=0,Rr=1,u,v,p,i;bool flg;Min[1]=V[1];for(inq[q[0]=1]=1;Ft!=Rr;inq[u]=0){u=q[Ft++];if(Ft==N)Ft=0;for(p=he[u];p;p=ne[p]){v=to[p];flg=0;if(Min[v]==101)flg=1,Min[v]=V[v];if(Min[v]>Min[u])flg=1,Min[v]=Min[u];if(flg&&!inq[v]){inq[q[Rr++]=v]=1;if(Rr==N)Rr=0;}}}}void BFS(){int Ft=0,Rr=1,u,v,p;for(inq[q[0]=n]=1;Ft<Rr;){u=q[Ft++];for(p=he2[u];p;p=ne2[p])if(!inq[v=to2[p]])inq[q[Rr++]=v]=1;}}int main(){//freopen("r.in","r",stdin);//freopen("w.out","w",stdout);int i,x,y,z;scanf("%d%d",&n,&m);rep(i,1,n)scanf("%d",&V[i]),Min[i]=101;while(m--){scanf("%d%d%d",&x,&y,&z);add(x,y),add2(y,x);if(z>1)add(y,x),add2(x,y);}spfa();BFS();rep(i,1,n)if(inq[i])Max=max(Max,V[i]-Min[i]);printf("%d\n",Max);    return 0;}

原创粉丝点击