luogu P5382 [THUPC2019]改善生活

https://www.luogu.com.cn/problem/P5382

写一波传递闭包就行了
其余不难,可以用bitset优化
code:

#include<bits/stdc++.h>
#define N 705
using namespace std;
int n, m, c[N], w[N], s[N];
bitset<N> g[N];
int main() {
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i ++) scanf("%d", &c[i]);
    for(int i = 1; i <= n; i ++) scanf("%d", &w[i]);
    for(int i = 1; i <= m; i ++) {
        int u, v;
        scanf("%d%d", &u, &v);
        g[u][v] = 1;
    }
    for(int k = 1; k <= n; k ++)
        for(int i = 1; i <= n; i ++)
            if(g[i][k])
                g[i] |= g[k];
    int ans = 0;
    for(int i = 1; i <= n; i ++) if(c[i] == 1) {
        memset(s, 0, sizeof s);
        for(int j = 1; j <= n; j ++) if(g[i][j]) s[c[j]] += w[j];
        for(int j = 2; j <= n; j ++) ans = max(ans, s[j] / w[i]);
    }
    printf("%d", ans);
    return 0;
}

posted @ 2021-10-13 15:11  lahlah  阅读(36)  评论(0编辑  收藏  举报