ISAP 样例没过,求助
查看原帖
ISAP 样例没过,求助
363036
chlchl楼主2022/7/29 22:21

rt,总是输出 00

#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;
}
2022/7/29 22:21
加载中...