问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

各位前辈:杭电acm HDU 1233题,最简单的最小生成树问题,但我的为什么总是access violation呢

发布网友 发布时间:2022-04-24 13:56

我来回答

2个回答

热心网友 时间:2023-10-15 08:48

access violation 一般都是数组开小了。你的代码中也就一个flag数组。。
我把你的flag数组开大之后提交下,超时了。。
楼主在自己看看把。。
超时代码。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#include<iostream>
#include<queue>
using namespace std;
typedef struct
{
int v1,v2,len;
}Node;
bool operator >(Node a,Node b)
{
if(a.len>b.len)
return true;
else
return false;
}
bool flag[100000];
int main()
{
int n;
Node e;
priority_queue< Node,vector<Node>,greater<Node> > q;
while(scanf("%d",&n),n)
{
while(!q.empty()) q.pop();
int m = n*(n-1)/2;
int i;
for(i=0;i<n;i++)
flag[i] = false;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&e.v1,&e.v2,&e.len);
q.push(e);
}
int count = 1,sum = 0;
while(count <n)
{
e = q.top();
q.pop();
if(flag[e.v1] && flag[e.v2])
continue;
flag[e.v1] = true;
flag[e.v2] = true;
sum += e.len;
count ++;
}
cout<<sum<<endl;
}
return 0;
}

热心网友 时间:2023-10-15 08:48

编号是从1到N,而你在对数组f和rank赋初始值的时候是从0到N-1赋的,也未对输入的村庄编号进行减1处理,所以会出现wrong answer的情况。你只需要将for(i=0;i<n;i++)改为for(i=1;i<=n;i++)或对所有输入的村庄编号进行减1处理就能Accepted。
修改后的程序如下(这段程序采用的修改是将for(i=0;i<n;i++)改为for(i=1;i<=n;i++)):
#include<stdio.h>
#include<stdlib.h>
#define N 105
#define MAX 50005
typedef struct{
int x,y,cost;
}edge;
edge s[MAX];
int ans,f[N],rank[N];
int cmp(const void *a,const void *b)
{
return ((edge *)a)->cost-((edge *)b)->cost;
}
void make_set(int x)
{
f[x]=x;
rank[x]=0;
}
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
void Union(int x,int y,int cost)
{
ans+=cost;
if(rank[x]>rank[y])
f[y]=x;
else
{
if(rank[x]==rank[y])
rank[y]++;
f[x]=y;
}
}
int main()
{
int i,n,k,x,y;
while(scanf("%d",&n),n!=0)
{
for(k=0;k<n*(n-1)/2;k++)
scanf("%d%d%d",&s[k].x,&s[k].y,&s[k].cost);
qsort(s,k,sizeof(s[0]),cmp);
for(i=1;i<=n;i++)
make_set(i);
ans=0;
for(i=0;i<k;i++)
{
x=find(s[i].x);
y=find(s[i].y);
if(x!=y)
Union(x,y,s[i].cost);
}
printf("%d\n",ans);
}
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 杭电acm2132 Runtime Error(ACCESS_VIOLATION) 下面程序为什么在ACM中出现runtime error (access violation 为什么U盘内存是满的但却不显示内容,如何解决? ACM绝对值排序问题,为什么出现ACCESS_VIOLATION错误啊? 优盘里有东西,但是显示不出来怎么办? acm2018显示Runtime Error(ACCESS_VIOLATION) 做杭电acm题目时提交的代码出现ACCESS_VIOLATION错误。 杭电acm总是Runtime Error (ACCESS_VIOLATION) acm运行时显示RUNTIME_ERROR [ACCESS_VIOLATION,怎么解决? 如何解决ACM中ACCESS_VIOLATION的问题 怎么才能让别人登自己的QQ看不到聊天记录。详细点,,谢谢 关联QQ后删掉聊天记录怎样让对方不知道 关联了qq号怎样使她上我qq但看不见我的聊天记录 双方QQ关联 如何在不解除关联的情况下 让对方看不见我的消息动态 关联qq如何不让对方看到信息 养殖基围虾的利润有多高? 在农村养殖基围虾为什么利润如此高?怎么养殖? 养殖基围虾的利润真的很高吗?有什么依据? qq靓号怎么在网上买到永久的?? 想买qq号,有么 ...runtime error(access_violation)拜托各位大神 杭电acm2023,Runtime Error (ACCESS_VIOLATION)? 杭电acm 2132题Runtime Error(ACCESS_VIOLATION) 请问以下杭电acm 1009 代码为什么老显示Runtime Error (ACCESS_VIOLATION)啊?要怎么改? 关于ACM中Runtime Error at Test 1 (ACCESS_VIOLATION)的,程序和网址在下面,求大神解答!! 杭电ACM1004,Runtime Error,(ACCESS_VIOLATION) Runtime Error (ACCESS_VIOLATION) 到底出错在哪里呢?在线等,acm 提交很多次都错 杭电ACM 1002为什么总是 Runtime Error(ACCESS_VIOLATION)? 杭电ACM第1005题,自己测试使用结果都是对的,但是提交后提示Runtime Error (ACCESS_VIOLATION) 怎么注销银行绑定的手机号码? 杭电acm 一直显示Runtime Error (ACCESS_VIOLATION) http:&#47;&#47;acm.hdu.edu.cn&#47;showproblem.php?pid=2030 银行卡丢了,绑定的手机号码注销了,怎么办? 之前绑定银行卡的手机号注销了,可以去银行从新绑定新的手机号吗 银行卡绑定的手机号注销了怎么办 工行银行卡预留手机号注销了怎么更换? 请问留学中介(正规 较有名)的申请顾问收入一般多少? 银行绑定的手机号码应该怎么注销? 男女同事用陌陌聊天正常吗? 陌陌这个聊天工具好不好 银行卡绑定的手机号码换了手机银行怎么登录