设为首页 加入收藏

TOP

wikioi 1034 家园 动态网络中的时间流(费用流)
2015-07-24 06:29:00 来源: 作者: 【 】 浏览:31
Tags:wikioi 1034 家园 动态 网络 时间 费用

由于随着时间的变化,网络中的边会变,所以普通的网络流无法解决这样的问题。假设T时刻全部运完。

为此,我们可以基于时间拆点,将所有点拆成T个点,

每个点对于下一个时刻的自己都连一条容量为INF边,费用为1的边,意思就是在当前空间站等待1个时刻。

每个点对于下一个时刻能到的点,连一条边,容量是这艘太空船的容量,费用是1。

源点连0时刻的地球,容量为k,所有的月球连接汇点。费用都为0。

每次找到一条最短路进行增广,若增广流量达到总人数,则退出。

这时候找到最后到达月球的时刻。

建图的样子。

\

#include
  
   
#include
   
     #include
    
      #include
     
       using namespace std; #define MAXN 10000 #define MAXM 1000000 #define INF 0x3f3f3f3f struct node { int u,v,f,c,next; }e[MAXM]; int n,head[MAXN],pre[MAXN],dist[MAXN],vis[MAXN],ans; int en,s,t,maxflow,mincost; //s源点,t汇点 void add(int u,int v,int c,int f)//加边 { e[en].u=u; e[en].v=v; e[en].c=c; e[en].f=f; e[en].next=head[u]; head[u]=en++; e[en].u=v; e[en].v=u; e[en].c=-c; e[en].f=0; e[en].next=head[v]; head[v]=en++; } int spfa() { int i,u,v; for(i=0;i<=t;i++) pre[i]=-1,vis[i]=0,dist[i]=INF; dist[s]=0; vis[s]=1; queue
      
       q; q.push(s); while(!q.empty()) { u=q.front(); q.pop(); for(i=head[u];i!=-1;i=e[i].next) { v=e[i].v; if(e[i].f>0&&dist[u]+e[i].c
       
        

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 播放音频流(PCM裸流) 下一篇UVA 11374 Airport Express

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: