猛一看,好像是最大流,再一看,不是的……幸亏不是如果是我还一时写不出来,哈哈!
用变形的Dijsktra就可以做出来。。
我都可以做出来的题,那真叫一个水题!
View Code
#include#include #define N 1002 #define M 500000 int nodevp[N]; int nodeu[M],data[M],next[M],ind; int dist[N]; bool flag[N]; void addedge(int v,int u,int val) { nodeu[ind]=u; data[ind]=val; next[ind]=nodevp[v]; nodevp[v]=ind++; } void Dijsktra(int s,int e,int n) { int i,v,u,min; memset(dist,0,sizeof(dist)); memset(flag,0,sizeof(flag)); for(i=nodevp[s];~i;i=next[i]) dist[nodeu[i]]=data[i]; flag[s]=true; while(true) { for(v=0,i=1;i<=n;i++) { if(!flag[i] && dist[i]>dist[v]) v=i; } if(v==e) return ; flag[v]=true; for(i=nodevp[v];~i;i=next[i]) { u=nodeu[i]; if(!flag[u]) { min = dist[v] dist[u]) dist[u]=min; } } } } int main() { int t,n,m,cas=0; int i,v,u,val; freopen("input.txt","r",stdin); scanf("%d",&t); while(t--) { memset(nodevp,-1,sizeof(nodevp)); ind=0; scanf("%d %d",&n,&m); for(i=0;i