コード例 #1
0
int check(double g)
{
    mf.ClearAll(n+2);
    memset(deg, 0, sizeof(deg));
    for(int i=1; i<=n; i++)
        for(int j = i+1; j <= n; j++)
            if(a[j] < a[i]) mf.AddEdge(i, j, 1), mf.AddEdge(j, i, 1), deg[i]++, deg[j]++;
    for(int i=1; i<=n; i++)
        mf.AddEdge(source, i, U);
    for(int i=1; i<=n; i++)
        mf.AddEdge(i, sink, g*2.0 + 1.0*U - 1.0*deg[i]);
    double curf = mf.Maxflow(source, sink);
    return dcmp((U*n - curf)/2.0);
}
コード例 #2
0
ファイル: poj1273TT.cpp プロジェクト: WERush/Poj
  int main()
  {
    int Num,Edgenum;
    while(~scanf("%d%d",&Edgenum,&Num))
    {
        g.ClearAll(Num);

        for(int i=0;i<Edgenum;i++)
        {
          int st,ed,cost;
          scanf("%d%d%d",&st,&ed,&cost);st--;ed--;
          g.AddEdge(st,ed,cost);
        }

        int ans=g.MaxFlow(0,Num-1);
        printf("%d\n",ans);
    }

    return 0;
  }