社区讨论

44pts求问题(#17#18Wa,#16意外AC)

P14362[CSP-S 2025] 道路修复参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhiyfvx7
此快照首次捕获于
2025/11/03 17:45
4 个月前
此快照最后确认于
2025/11/03 17:45
4 个月前
查看原帖
RT,写的是k=0和特性A,然而按理说48只有44,有两个本该AC的WA了,还有一个意外AC了,
CPP
#include"bits/stdc++.h"
typedef long long ll;
const int N = 1e4 + 5,M = 1e6 + 5;
int fa[N],a[15][N];
struct side{
    int u,v,w;
    bool operator<(side x){return w < x.w;}
}s[N + M];
int getroot(int x){return fa[x] == x ? x : fa[x] = getroot(fa[x]);}
int main(){
    std::cin.tie(0)->sync_with_stdio(0);
    int n,m,k;std::cin >> n >> m >> k;
    for (int i = 1;i <= m;i++) std::cin >> s[i].u >> s[i].v >> s[i].w;
    for (int i = 1;i <= k;i++){
        std::cin >> a[i][0];
        for (int j = 1;j <= n;j++) std::cin >> a[i][j];
    }
    if (k == 0){
        std::sort(s + 1,s + 1 + m);
        for (int i = 1;i <= n;i++) fa[i] = i;
        ll ans = 0;
        for (int i = 1;i <= m;i++)
            if (getroot(s[i].u) != getroot(s[i].v)){
                fa[getroot(s[i].u)] = getroot(s[i].v);
                ans += s[i].w;
            }
        std::cout << ans << '\n';
        return 0;
    }
    int cnt = m;
    for (int i = 1;i <= k;i++)
        for (int j = 1;j <= n;j++)
            if (a[i][j] == 0){
                for (int t = 1;t <= n;t++)
                    if (t != j){
                        s[++cnt].u = j;
                        s[cnt].v = t;
                        s[cnt].w = a[i][t];
                    }
                break;
            }
    std::sort(s + 1,s + 1 + cnt);
    for (int i = 1;i <= n;i++) fa[i] = i;
    ll ans = 0;
    for (int i = 1;i <= cnt;i++)
        if (getroot(s[i].u) != getroot(s[i].v)){
            fa[getroot(s[i].u)] = getroot(s[i].v);
            ans += s[i].w;
        }
    std::cout << ans << '\n';
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...