设为首页 加入收藏

TOP

Codeforces Round #290 (Div. 2) E. Fox And Dinner 网络流(二)
2015-11-21 00:57:58 来源: 作者: 【 】 浏览:5
Tags:Codeforces Round #290 Div. Fox And Dinner 网络
0] = prime[1] = false; for(int i=2;i Dinic 算法实现最大流
#define INF			9000000000
#define EPS			(double)1e-9
#define mod			1000000007
#define PI			3.14159265358979
//*******************************************************************************/
#endif
#define N 205
#define M 100005
#define maxn 205
#define MOD 1000000000000000007
int n,pri[N],ansNum;
bool vis[N],prime[M];
vector
          
            ans[N];
struct Edge{
    int from,to,cap,flow;
    Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}
};
struct EdmondsKarp{
    int n,m;
    vector
           
             edges;//存边 边的两倍 vector
            
              G[maxn];//邻接表,图 int a[maxn];//起点到i的可改进量 int p[maxn];//最短路入弧号 void init(int n){ FI(n) G[i].clear(); edges.clear(); } void AddEdge(int from,int to,int cap){ edges.push_back(Edge(from,to,cap,0)); edges.push_back(Edge(to,from,0,0));//反向 m = edges.size(); G[from].push_back(m-2); G[to].push_back(m-1); } int Maxflow(int s,int t){ int flow = 0; for(;;){ memset(a,0,sizeof(a)); queue
             
               Q; Q.push(s); a[s] = INF; while(!Q.empty()){ int x = Q.front();Q.pop(); FI(G[x].size()){ Edge & e = edges[G[x][i]]; if(!a[e.to]&&e.cap > e.flow){ p[e.to] = G[x][i]; a[e.to] = min(a[x],e.cap - e.flow); Q.push(e.to); } } if(a[t]) break; } if(!a[t]) break; for(int u = t;u !=s;u = edges[p[u]].from){ edges[p[u]].flow += a[t]; edges[p[u] ^ 1].flow -= a[t]; } flow += a[t]; } return flow; } }; struct Dinic{ int n,m,s,t; vector
              
                edges;//存边 边的两倍 vector
               
                 G[maxn];//邻接表,图 bool vis[maxn];//BFS使用 int d[maxn];//起点到i的距离 int cur[maxn];//当前弧下标 void init(int n){ FI(n) G[i].clear(); edges.clear(); } void AddEdge(int from,int to,int cap){ edges.push_back(Edge(from,to,cap,0)); edges.push_back(Edge(to,from,0,0));//反向 m = edges.size(); G[from].push_back(m-2); G[to].push_back(m-1); } bool BFS(){ memset(vis,0,sizeof(vis)); queue
                
                  Q; Q.push(s); d[s] = 0; vis[s] = 1; while(!Q.empty()){ int x = Q.front();Q.pop(); for(int i=0;i
                 
                   e.flow){ vis[e.to] = 1; d[e.to] = d[x] + 1; Q.push(e.to); } } } return vis[t]; } int DFS(int x,int a){ if(x == t || a== 0) return a; int flow = 0,f; for(int i= cur[x];i
                  
                   0){ e.flow += f; edges[G[x][i]^1].flow -= f; flow += f; a -= f; if( a== 0)break; } } return flow; } int Maxflow(int s,int t){ this->s = s;this-> t = t; int flow = 0; while(BFS()){ memset(cur,0,sizeof(cur)); flow += DFS(s,INF); } return flow; } }; //EdmondsKarp Ek; Dinic Ek; void InitPrime(){ memset(prime,true,sizeof(prime)); prime[0] = prime[1] = false; for(int i=2;i
                   
                    

?

?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDOJ 2121 Ice_cream’s world II.. 下一篇LeetCode131:Palindrome Partitio..

评论

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