请问这两个代码的区别
查看原帖
请问这两个代码的区别
547567
Davis_xuzh楼主2023/12/3 21:31
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10,M=2e5+10;
int n,m,q,idx,h[N],w[M],e[M],ne[M],dis[N];
bool book[N];
typedef pair<int,int> PII;
priority_queue<PII,vector<PII>,greater<PII> > que;
void addEdge(int x,int y,int z){
    e[idx]=y;
    w[idx]=z;
    ne[idx]=h[x];
    h[x]=idx;
    idx++;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    memset(dis,0x3f,sizeof dis);
    memset(h,-1,sizeof h);
    cin>>n>>m>>q;
    for(int i=1;i<=m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        addEdge(x,y,z);
        addEdge(y,x,z);
    }
    for(int i=h[1];~i;i=ne[i]) dis[e[i]]=min(dis[e[i]],w[i]);
    dis[1]=0;
    que.push({0,1});
    while(!que.empty()){
        int u=que.top().second;
        que.pop();
        if(book[u]) continue;
        book[u]=1;
        for(int v=h[u];~v;v=ne[v]){
            dis[e[v]]=min(dis[u]+w[v],dis[e[v]]);
            que.push({dis[e[v]],e[v]});
        }
    }
    for(int i=1;i<=q;i++){
        int sx,sy;
        cin>>sx>>sy;
        cout<<dis[sx]+dis[sy]<<endl;
    }
    return 0;
}

https://www.luogu.com.cn/record/138105798 这份代码提交是AC的。

#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10,M=2e5+10;
int n,m,q,idx,h[N],w[M],e[M],ne[M],dis[N];
bool book[N];
typedef pair<int,int> PII;
priority_queue<PII,vector<PII>,greater<PII> > que;
void addEdge(int x,int y,int z){
    e[idx]=y;
    w[idx]=z;
    ne[idx]=h[x];
    h[x]=idx;
    idx++;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    memset(dis,0x3f,sizeof dis);
    memset(h,-1,sizeof h);
    cin>>n>>m>>q;
    for(int i=1;i<=m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        addEdge(x,y,z);
        addEdge(y,x,z);
    }
    for(int i=h[1];~i;i=ne[i]) dis[e[i]]=min(dis[e[i]],w[i]);
    dis[1]=0;
    que.push({0,1});
    while(!que.empty()){
        int u=que.top().second;
        que.pop();
        if(book[u]) continue;
        book[u]=1;
        for(int v=h[u];~v;v=ne[v]){
          if(!book[e[v]]&&dis[e[v]]>dis[u]+w[v]){
                dis[e[v]]=dis[u]+w[v];
                que.push({dis[e[v]],e[v]});
            }
        }
    }
    for(int i=1;i<=q;i++){
        int sx,sy;
        cin>>sx>>sy;
        cout<<dis[sx]+dis[sy]<<endl;
    }
    return 0;
}

https://www.luogu.com.cn/record/138079880 这份代码提交0分。

请问为什么。

2023/12/3 21:31
加载中...