关于邻接表
  • 板块灌水区
  • 楼主Aw顿顿
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/1/15 21:33
  • 上次更新2023/11/5 04:47:59
查看原帖
关于邻接表
212283
Aw顿顿楼主2021/1/15 21:33

是顿顿本人,太菜了。迪杰不会了。

求问:

  • 以下代码中邻接表相关的 fr,v,nex,tofr,v,nex,to 分别是什么意思?
  • cnt,xcnt,x 的含义?
  • make_pair 的作用?
#include<bits/stdc++.h>
using namespace std;
int fr[100010],to[200010],v[200010],nex[200010];
int cnt,d[100010];
bool sure[100010];
int n,m,x,y,z,s;
void add(int x,int y,int w){
    to[++cnt]=y;
    v[cnt]=w;
    nex[cnt]=fr[x];
    fr[x]=cnt;
}priority_queue<pair<int,int> >q;
int main(){
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
    }for(int i=0;i<=n;i++)d[i]=0x7fffffff;
    d[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty()){
        int x=q.top().second;
        q.pop();
        if(sure[x])continue;
        sure[x]=1;
        for(int i=fr[x];i;i=nex[i]){
            int y=to[i],l=v[i];
            if(d[y]>d[x]+l){
                d[y]=d[x]+l;
                q.push(make_pair(-d[y],y));
            }
        }
    }for(int i=1;i<=n;i++)printf("%d ",d[i]);
    return 0;
}

十分感谢,回答时恳请 @ 我一下,因为现在得下线了/kk

2021/1/15 21:33
加载中...