1:dp求一遍
2:所有點拆成入點和出點,對於沒個f[i]=1的1點連源點,每個f[i]=ans1的點連匯點,每個點的入點和出點再連一條邊,所有容量為1,求一遍最大流。
2:1和n可以用多次,所以對於點1和點n,入點和出的連邊的容量變為inf,如果需要連源點或匯點那麼容量也變為n,其餘容量為1,求一遍最大流。
#include#include#include#includeusing namespace std;
const int maxm = 10005;
const int maxn = 1000005;
const int inf = 1e9 + 7;
struct node
edge[maxm];
int dis[maxm], dep[maxm], cur[maxm], head[maxm], f[maxm], vis[maxm], pre[maxm], a[maxm];
int n, m, s, t, cnt;
void init()
void add(int u, int v, int w)
int bfs()
} }if (dis[t] == -1) return 0;
return 1;
}int dfs(int u, int flow)
} }return 0;
}int dinic()
return ans;
}int main()
} printf("%d\n", ans);
for (i = 1;i <= n;i++)
if (ans == 1) printf("%d\n", n);
else printf("%d\n", dinic());
init();
for (i = 1;i <= n;i++)
if (ans == 1) printf("%d\n", n);
else printf("%d\n", dinic());
return 0;
}
網路流24題 最長遞增子串行
輸入檔案 alis.in輸出檔案 alis.out簡單對比 時間限制 1 s 記憶體限制 128 mb 問題描述 給定正整數序列x1,xn。1 計算其最長遞增子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的遞增子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可...
網路流24題 最長遞增子串行
給定正整數序列x1,xn。1 計算其最長遞增子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的遞增子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的遞增子串行。設計有效演算法完成 1 2 3 提出的計算任務 第1 行有1個正整數n n 500...
網路流24題6 最長遞增子串行
給定正整數序列x1,xn 1 計算其最長遞增子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的遞增子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的遞增子串行。設計有效演算法完成 1 2 3 提出的計算任務。第一問秒掉 第二問比較難想到,每個...