吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 539|回复: 3
收起左侧

[求助] 算法求助

[复制链接]
yfjhhh 发表于 2023-6-26 20:52
求助,自己写的一个最小生成树代码,AC不了
洛谷题目
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct edge{ //定义边
        int value;//权值
        int spot;//到达点
};
bool spot[100];//点是否经过
struct cmp {
        bool operator() (edge& a,edge& b) {
                // 定义优先级的比较方式
                return a.value < a.value;
        }
};
priority_queue<edge, vector<edge>, cmp> pq;
int main()
{
        int map[100][100];
        edge e;
        memset(map,-1,sizeof(map));
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=m;i++){
                int x,y,z;
                cin>>x>>y>>z;
                map[x][y]=z;
                map[y][x]=z;
                //cout<<z<<endl;
        }
        int begin=1,l=0,ans=0;
        do{
                //cout<<111<<endl;
                for(int i=1;i<=n;i++){
                        //cout<<"test1:"<<i<<endl;
                        if(map[begin][i]!=-1&&spot[i]==0){
                                e.spot=i;
                                e.value=map[begin][i];
                                pq.push(e);
                                //cout<<"test2:"<<begin<<"to"<<e.spot<<endl;
                        }
                }
                spot[begin]=1;
                if(!pq.empty()&&l<=n-2){
                        edge eee;
                        eee=pq.top();
                        ans+=eee.value;
                        begin=eee.spot;
                        l++;
                        //cout<<"test3:"<<ans<<endl;
                        pq.pop();
                }
                else 
                {
                        break;
                }
        }while(1);
        //cout<<ans<<endl;
        //cout<<l<<endl;
        //cout<<l<<endl<<n;
        if(l==n-1){
                cout<<ans;
        }
        else
        {
                cout<<"orz";
        }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| yfjhhh 发表于 2023-6-26 21:17
链接https://www.luogu.com.cn/problem/P3366#submit
TenSir152 发表于 2023-6-27 07:00
400h297004533 发表于 2023-6-27 19:39
#include<bits/stdc++.h>
using namespace std;

struct edge {
    int value; // 权值
    int spot;  // 到达点
};

bool spot[100];  // 点是否经过

struct cmp {
    bool operator() (edge& a, edge& b) {
        // 定义优先级的比较方式
        return a.value < b.value;
    }
};

priority_queue<edge, vector<edge>, cmp> pq;

int main() {
    int map[100][100];
    edge e;
    memset(map, 0, sizeof(map));
   
    int n, m;
    cin >> n >> m;
   
    for (int i = 1; i <= m; i++) {
        int x, y, z;
        cin >> x >> y >> z;
        map[x][y] = z;
        map[y][x] = z;
    }
   
    int begin = 1, l = 0, ans = 0;
   
    do {
        for (int i = 1; i <= n; i++) {
            if (map[begin][i] != 0 && spot[i] == 0) {
                e.spot = i;
                e.value = map[begin][i];
                pq.push(e);
            }
        }
        
        spot[begin] = 1;
        
        if (!pq.empty() && l <= n - 2) {
            edge eee = pq.top();
            ans += eee.value;
            begin = eee.spot;
            l++;
            pq.pop();
        } else {
            break;
        }
    } while (1);
   
    if (l == n - 1 && pq.empty()) {
        cout << ans;
    } else {
        cout << "orz";
    }
   
    return 0;
}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表