HDU-1301,最小生成树板子,Debug了好久一直WA求助
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int t,n,head[5005],tot,dis[5005];
struct node{
char to;
int w,nxt;
}a[1000005];
void add(char u,char v,int w){
tot++;
a[tot].to=v;
a[tot].w=w;
a[tot].nxt=head[u];
head[u]=tot;
}
bool vis[5005];
priority_queue<pair<int,char> >pq;
int main(){
while(1){
cin>>n;
if(n==0)return 0;
memset(dis,127,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(head,0,sizeof(head));
tot=0;
for(int i=1;i<n;i++){
char u,v;
int m,w;
cin>>u>>m;
for(int j=1;j<=m;j++){
cin>>v>>w;
add(u,v,w);
add(v,u,w);
}
}
unsigned long long ans=0;
dis['A']=0;
pq.push(make_pair(0,'A'));
int cnt=0;
while(!pq.empty()&&cnt<n){
char u=pq.top().second,d=pq.top().first;pq.pop();
if(vis[u])continue;
vis[u]=1;
ans-=1ull*d;
cnt++;
for(int i=head[u];i!=0;i=a[i].nxt){
if(a[i].w<dis[a[i].to]&&!vis[a[i].to]){
dis[a[i].to]=a[i].w;
pq.push(make_pair(-dis[a[i].to],a[i].to));
}
}
}
cout<<ans<<'\n';
}
return 0;
}
清空了,ull也开了,真DEBUG不动了
禁止wyy