| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:好吧我承认这是个最大流模板题In Reply To:好吧我承认这是个最大流模板题 Posted by:KatrineYang at 2016-09-28 11:51:01 > #include <iostream>
> #include <stdio.h>
> #include <queue>
> using namespace std;
>
> const int THRES = 200;
>
> const int SSS = 2147483647;
> const int TTT = -2147483648;
> int N, M;
> int graph[THRES][THRES] = {{0}};
> bool s[THRES] = {0}, t[THRES] = {0};//false表示可用
>
> void init(){
> for(int i = 0; i < THRES; i++){
> for(int j = 0; j < THRES; j++){
> graph[i][j] = 0;
> }
> }
> for(int i = 0; i < THRES; i++) s[i]=t[i]=0;
> }
>
> bool pushflow(){
> //如果push不了,返回false
> queue<int> bfs;
> bool getT = false;
> int noT;
> int S[THRES] = {0}, T[THRES] = {0};
> for(int i = 1; i < N; i++){
> if(!s[i]){
> S[i] = SSS;
> bfs.push(i);
> }
> }
> while(!bfs.empty()){
> int cur = bfs.front();
> bfs.pop();
> if(cur > 0){
> //是s这边的点
> for(int j = 1; j <= M; j++){
> if(graph[cur][j] == 1 && T[j] == 0){
> bfs.push(-j);
> T[j] = cur;
> }
> }
> }
> else{
> //是t这边的点
> int j = -cur;
> if(!t[j]){
> getT = true;
> noT = cur;
> break;
> }
> for(int i = 1; i < N; i++){
> if(graph[i][j] == -1 && S[i] == 0){
> bfs.push(i);
> S[i] = cur;
> }
> }
> }
> }
> if(!getT) return false;
> t[-noT] = true;
> int TtoS = 1;
> while(1){
> if(TtoS){
> //push路径当前从S端到T端
> int noS = T[-noT];
> graph[noS][-noT] = -1;
> noT = noS;
> }
> else{
> //从T端到S端
> int noS = S[noT];
> if(noS == SSS){
> s[noT] = true;
> break;
> }
> graph[noT][-noS] = 1;
> noT = noS;
> }
> TtoS = 1 - TtoS;
> }
> return true;
> }
>
>
> int main() {
> int t;
> scanf("%d", &t);
> for(int ii = 0; ii < t; ii++){
> init();
> int str;
> scanf("%d%d", &N, &str);
> N++;
> M=N-1;
> for(int i = 0; i < str; i++){
> int a,b;
> scanf("%d%d", &a, &b);
> graph[a][b] = 1;
> }
> int cnt = 0;
> while(pushflow()){
> cnt++;
> }
> printf("%d\n", M-cnt);
> }
> return 0;
> }
最小路径覆盖模板。。。
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator