s - >往m個裝置流1, 然後每個裝置往對應插口號流1,然後插口號之間的k個轉換邊流無窮大(代表該裝備能被利用無窮遍),然後插排號流1到對應的n個插排,然後每個插排流1到匯點。
//#pragma comment(linker, "/stack:1024000000,1024000000")
#include #include #include #include #include #include #include #include #include #include #include #include #include #define all(a) a.begin(), a.end()
#define clr(a, x) memset(a, x, sizeof a)
#define fst first
#define snd second
#define pb push_back
#define lowbit(x) (x&(-x))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define rep1(i,x,y) for(int i=x;i<=y;i++)
#define rep(i,n) for(int i=0;i<(int)n;i++)
using namespace std;
const double eps = 1e-10;
typedef long long ll;
typedef long long ll;
typedef pairpii;
const int oo =0x3f3f3f3f;
const int maxn = 401;
const int maxm = 500;
mapm;
int cnt_,rec[maxn] , plu[maxn];
int id(string s)
struct edge
};struct dinic
int addedge(int u, int v, int c)
bool bfs()}}
return vis[t];
}int dfs(int x, int a)
}return flow;
}int maxflow(int s, int t)
return flow;
}} net;
int s,t,n,m,k,f[maxn],t[maxn];
int main()
scanf("%d",&m);
char s1[50],s2[50];
rep1(i,1,m)
scanf("%d",&k);
rep1(i,1,k)
s = 0 , t = cnt_;
net.init(t);
rep1(i,1,cnt_-1) if(plu[i])
rep1(i,1,cnt_-1) if(rec[i])
rep1(i,1,k)
printf("%d\n",m-net.maxflow(s,t));
if(ta) printf("\n");
}return 0;
}
插頭Uva753 最大流
題意 n個插座和m個插頭,k種轉換器 每種都是無限個,可以把插頭轉換成其他型別的插頭 求最少剩多少個插頭沒插上插座。思路 首先給所有插頭或插座以及轉換器中涉及到的型別編號。然後根據轉換器建立型別之間的轉化關係,接著用floyd演算法算出每個裝置所有適配的型別,並將其容量設為inf,表示轉換器數量充足...
最大流,Floyd(UNIX插頭 uva 753)
給n個插座,m個裝置和k種轉換器 n,m,k 100 每種轉換器有無限多。已知每個插座型別,每個裝置的插頭型別,以及每種轉換器的插座型別和插頭型別。插頭和插座型別用不超過24各字母表示,插頭只能插到型別相同的插座中。乙個裝置的插頭可以直接插入插座中也可以經過乙個或多個轉換器後再插入插座中。一開始跟著...
uva 11419 最大匹配
include include include include include include using namespace std const int maxn 1e4 5 int r,c,n,x,y struct bpm void addedge int u,int v bool match ...