rt,总是输出 0。
#include<bits/stdc++.h>
using namespace std;
const int N = 50 + 10;
int n, m, s, t, dep[N], num[N];
int g[N][N];
void bfs(){
memset(dep, -1, sizeof(dep));
queue<int> q;
q.push(t), dep[t] = 0;
while(!q.empty()){
int u = q.front();
q.pop(), num[dep[u]]++;
for(int v=1;v<=n;v++){
if(g[v][u] && dep[v] == -1) dep[v] = dep[u] + 1, q.push(v);
}
}
}//没问题了
int dfs(int u, int now){
if(u == t) return now;
int res = 0;
for(int v=1;v<=n;v++){
if(dep[v] + 1 != dep[u] || !g[u][v]) continue;
int k = dfs(v, min(g[u][v], now));
res += k, now -= k;
g[u][v] -= k, g[v][u] += k;
if(res == now) return res;
//if(isend || !now) return res;
}
num[dep[u]]--;
if(!num[dep[u]]) dep[s] = n + 1;
num[++dep[u]]++;
return res;
}
int maxflow(){
bfs();
int ans = 0;
while(dep[s] < n) ans += dfs(s, 1000000000);
return ans;
}
int change(char c){
if(isupper(c)) return c - 'A' + 1;
return c - 'a' + 27;
}
int main(){
scanf("%d", &n);
for(int i=1;i<=n;i++){
int u, v, w;
char ss[2], tt[2];
scanf("%s%s%d", ss, tt, &w);
u = change(ss[0]), v = change(tt[0]);
g[u][v] += w;
}
s = 1, t = 26;
printf("%d\n", maxflow());
return 0;
}