标签:des c style class blog code
Time
Limit: 1000/1000 MS (Java/Others) Memory
Limit: 32768/65535 K (Java/Others)
Total Submission(s):
1399 Accepted Submission(s):
712
费用流,拆点,source连接每个入点,费用0,容量1,每个出点连sink,费用0,容量1,入点出点见连费用边权,容量1,裸的费用流。
只要注意一下spfa的队列数组开大一点。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define MAXN 210 #define INF 0x3f3f3f3f //AC int n,m; struct Edge { int np,val,c; Edge *next,*neg; }E[MAXN*MAXN],*V[MAXN*2]; int tope,sour=0,sink=1; void add_edge(int x,int y,int z,int c) { //cout<<"Add"<<x<<" "<<y<<" "<<z<<" "<<c<<endl; E[++tope].np=y; E[tope].val=z; E[tope].c=c; E[tope].next=V[x]; V[x]=&E[tope]; E[++tope].np=x; E[tope].val=0; E[tope].c=-c; E[tope].next=V[y]; V[y]=&E[tope]; E[tope].neg=&E[tope-1]; E[tope-1].neg=&E[tope]; } int q[MAXN*10],vis[MAXN],dis[MAXN],dfn=0; int prev[MAXN]; Edge *path[MAXN]; int spfa() { int ope=-1,clo=0,now; Edge *ne; memset(dis,INF,sizeof(dis)); dfn++; q[0]=sour; vis[sour]=dfn; dis[sour]=0; while (ope<clo) { now=q[++ope]; vis[now]=0; for (ne=V[now];ne;ne=ne->next) { if (ne->val&&dis[ne->np]>dis[now]+ne->c) { dis[ne->np]=dis[now]+ne->c; prev[ne->np]=now; path[ne->np]=ne; if (vis[ne->np]!=dfn) { vis[ne->np]=dfn; q[++clo]=ne->np; } } } } return dis[sink]; } pair<int,int> max_cost_flow() { int ds,fl,now,x; pair<int,int> ret; ret.first=ret.second=0; while (ds=spfa(),ds!=INF) { x=sink; fl=INF; while (x!=sour) { fl=min(fl,path[x]->val); x=prev[x]; } x=sink; while (x!=sour) { path[x]->val-=fl; path[x]->neg->val+=fl; x=prev[x]; } ret.first+=fl; ret.second+=ds*fl; } return ret; } int main() { freopen("input.txt","r",stdin); int i,j,k,x,y,z; while (~scanf("%d%d",&n,&m)) { tope=-1; memset(V,0,sizeof(V)); for (i=0;i<n;i++) { add_edge(sour,2+i,1,0); add_edge(2+i+n,sink,1,0); } for(i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&z);x--;y--; add_edge(2+x,2+y+n,1,z); } pair<int,int> p1; p1=max_cost_flow(); if (p1.first!=n) { printf("-1\n"); }else { printf("%d\n",p1.second); } } }
Cyclic Tour HDUOJ 费用流,布布扣,bubuko.com
标签:des c style class blog code
原文地址:http://www.cnblogs.com/mhy12345/p/3774524.html