社区讨论

24分,其它点WA,TLE,蹲一个大佬帮调

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhqm5dd6
此快照首次捕获于
2025/11/09 02:23
4 个月前
此快照最后确认于
2025/11/16 14:06
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define endl '\n'
#define maxm 1000005
#define int long long
#define inf 0x7f7f7f7f
#define maxn 10005
#define maxk 12
using namespace std;
struct node
{
    int u;
    int v;
    int w;
}e[maxm],g[maxn*2];
int n,m,k,ans;
int a[maxk][maxn];
int c[maxk];
int fa[maxn+maxk];
inline bool cmp(node x,node y)
{
    return x.w<y.w;
}
inline int find(int x)
{
    if (fa[x]==x) return fa[x];
    else return fa[x]=find(fa[x]);
}
inline void uni(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    if (fx==fy) return;
    fa[fx]=fy;
}
int tot=0;
inline void kruskal()
{
    for (int i=1;i<=m;i++)
    {
        if (find(e[i].u)==find(e[i].v)) continue;
        uni(e[i].u,e[i].v);
        g[++tot]=e[i];
    }
}
inline int solve(node p[],int s)
{
    int tmp=0;
    int cnt=0;
    int qzq=0;
    node r[maxm];
    for (int i=0;i<k;i++)
    {
        if ((s>>i)&1) 
        {
            ++cnt;
            for (int j=1;j<=n;j++)
                r[++qzq]={n+cnt,j,a[i+1][j]};
            tmp+=c[i+1];
        }
    }
    sort(r+1,r+qzq+1,cmp);
    node v[2*maxn]={0};
    node *ed=merge(p+1,p+tot+1,r+1,r+qzq+1,v+1,cmp);
    for (node *it=&v[1];it!=ed;it++)
    {
        if (find(it->u)==find(it->v)) continue;
        uni(it->u,it->v);
        tmp+=it->w;
    }
    return tmp;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m >> k;
    for (int i=1;i<=m;i++)
    {
        int x,y,z;
        cin >> x >> y >> z;
        e[i]={x,y,z};
    }
    sort(e+1,e+m+1,cmp);
    for (int i=1;i<=n;i++) fa[i]=i;
    for (int i=1;i<=k;i++)
    {
        cin >> c[i];
        for (int j=1;j<=n;j++) cin >> a[i][j];
    }
    kruskal();
    ans=inf;
    for (int s=0;s<(1<<k);s++)
    {
        for (int i=1;i<=n+k;i++) fa[i]=i;
        ans=min(ans,solve(g,s));
    }
    cout << ans <<endl;
    return 0;
}

回复

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

正在加载回复...