acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(3)讨论(0)提交记录(5659)
  • 大学生解答代码(公式繁多,建议不看)

    userId_undefined

    AC

    出道萌新倔强青铜
    14阅读
    0回复
    2点赞
  • 解题(伪

    切到python, print("No Answer") 就能AC

    userId_undefined

    你好,我是熊二

    11阅读
    0回复
    2点赞
  • 解题

    #include <cstdio> #include <algorithm> using namespace std; int f[1005]; int find(int x){ if(f[x]==x) return x; return f[x]=find(f[x]); } inline void merge(int x,int y){ f[find(x)]=find(y); // 随机化降低并查集被卡的风险 } struct edge{ int u,v,w; }; inline bool cmp(edge x,edge y){return x.w<y.w;} edge g[10005]; #define make_edge(u,v,w) {u,v,w} int main(){ int n,m,k,cnt=0,ans=0; scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=m;i++){ int u,v,w; scanf("%d%d%d",&u,&v,&w); g[i]=make_edge(u,v,w); } sort(g+1,g+1+m,cmp); for(int i=1;i<=m&&cnt<n-k;i++){ if(find(g[i].u)!=find(g[i].v)){ merge(g[i].u,g[i].v); cnt++; ans+=g[i].w; } } if(cnt==n-k) printf("%d",ans); else printf("No Answer"); }

    userId_undefined

    158****1826

    13阅读
    0回复
    0点赞
首页