问题标题: 酷町堂:2769求解

0
0
已解决
沈峻宇
沈峻宇
资深天翼
资深天翼

#include <bits/stdc++.h>
#define re register
using namespace std;
inline int read() {
    int X=0,w=1; char c=getchar();
    while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    return X*w;
}
 
struct Edge { int v,w,nxt; };
Edge e[500010];
int head[100010],cnt=0;
 
inline void addEdge(int u,int v,int w) {
    e[++cnt].v=v;
    e[cnt].w=w;
    e[cnt].nxt=head[u];
    head[u]=cnt;
}
 
int n,m,s;
int dis[100010];
 
struct node { 
    int u,d;
    bool operator <(const node& rhs) const {
        return d>rhs.d;
    }
};
 
inline void Dijkstra() {
    for (re int i=1;i<=n;i++) dis[i]=2147483647;
    dis[s]=0;
    priority_queue<node> Q; 
    Q.push((node){s,0});
    while (!Q.empty()) {
        node fr=Q.top(); Q.pop();
        int u=fr.u,d=fr.d;
        if (d!=dis[u]) continue;
        for (re int i=head[u];i;i=e[i].nxt) {
            int v=e[i].v,w=e[i].w;
            if (dis[u]+w<dis[v]) {
                dis[v]=dis[u]+w;
                Q.push((node){v,dis[v]});
            }
        }
    }
}
 
int main() {
    n=read(),m=read(),s=read();
    for (re int i=1;i<=m;i++) {
        int X=read(),Y=read(),Z=read();
        addEdge(X,Y,Z);
    }
    Dijkstra();
    for (re int i=1;i<=n;i++) printf("%d ",dis[i]);
    return 0;
}

0分代码


0
已采纳
包涵宇
包涵宇
中级天翼
中级天翼

@沈峻宇

这是。。。队列!!!

难以想象!!!

你。。。

好吧,题目是看懂了,但你的代码把我搞蒙了。。。

输入要用位运算吗?

这里:

 bool operator <(const node& rhs) const {
        return d>rhs.d;
    }

既然你都定义成const了,那你做这个函数有设么用?

顺便解释一下:const:静态的

这题我觉得用BFS就行了啊。。。

太厉害了!!!!

0
龙舟
龙舟
高级光能
高级光能

哪儿抄的?我都不会!!

0
龙舟
龙舟
高级光能
高级光能

你评论啥我看不见!!

@沈峻宇 

0
0
潘晨皓
潘晨皓
高级天翼
高级天翼

你说啥?

@沈峻宁!​​​​​​​

我看不见!

0
沈峻宇
沈峻宇
资深天翼
资深天翼

我没抄!我是看书的!

我要回答