A_sh @ 2021-09-26 15:20:37
我的prim堆优化炸了三个点;
然鹅kruscal好好的;
acwing上交了一遍也是三个点炸;
貌似是连通图输出了orz;
但是找不到错误,求助;
贴码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f3f3f
const int N=1010,M=114514;
priority_queue< pair<int,int> > q;
int ans,tot;
int d[N],h[N],e[M],ne[M],v[M];
bool vis[M];
int m,n;
void add(int x,int y,int z){
v[++tot]=y,e[tot]=z,ne[tot]=h[x],h[x]=tot;
}
inline void prim(){
q.push(make_pair(0,1));
int cnt=0,sum=0;
while(q.size()){
int x=q.top().second,dst=q.top().first;
q.pop();
if(vis[x])continue;//寻找更新点
vis[x]=1;
sum-=dst;
cnt++;
for(int i=h[x];i;i=ne[i]){//-1
if(!vis[v[i]]){
q.push(make_pair(-e[i],v[i]));
}
}
}
if(cnt==n)printf("%lld",sum);
else printf("orz");
}
inline int qr(){
int res=0,f=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){res=(res<<1)+(res<<3)+(ch^48);ch=getchar();}
return res*f;
}
signed main(){
n=qr();m=qr();
for(int i=1;i<=m;i++){
int x=qr(),y=qr(),z=qr();
add(x,y,z);
add(y,x,z);
}
prim();
return 0;
}
by うっせぇわ @ 2021-09-26 18:04:09
这么臭的M有存在的必要吗(
by _SeeleVollerei_ @ 2021-09-26 18:19:29
@lzx201720550 是不是N开小了 题目不是5k吗
by _SeeleVollerei_ @ 2021-09-26 18:22:34
@lzx201720550 M也没开够
by A_sh @ 2021-09-26 18:34:00
@泷泽三月
https://www.luogu.com.cn/record/58605515
感谢调试;
然而我这个数据范围是acwing上粘过来的;
可能是因为那个网页5000去掉了个0;
总之orz orz orz