问题标题: 酷町堂:2769

0
0
已解决
时梓繁
时梓繁
修练者
修练者

请?问?有?哪?位?大?佬?会?

求?核?心?谢?谢???????

时梓繁在2018-10-06 18:51:29追加了内容

别再会答用欧拉路径,之类的了

时梓繁在2018-10-07 07:57:35追加了内容

也别再回答用欧拉回路解决

时梓繁在2018-10-07 07:59:08追加了内容

也别再回答这题很难,要先打好基础之类的

时梓繁在2018-10-12 21:48:09追加了内容
#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;
}
时梓繁在2018-10-12 21:49:59追加了内容

WA

时梓繁在2018-10-12 21:51:45追加了内容

WA


0
已采纳
张睿杰
张睿杰
初级天翼
初级天翼

这题是广度搜索,你先想想,等我打完注释给你哈

0
0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

考试的话骗分

想不开的话AC自动机

真正做起来的话搜索与回溯+欧拉回路(一个轮回一笔画)

0
赵逸凡
赵逸凡
初级启示者
初级启示者

骗分低级:输出Impossible,或者随机数。

骗分中级:打表,从1枚举到100,透露一下有规律的。

骗分高级:unsighed long long 

骗分终极:流运算恐怕不是你写的吧,在百度搜一下那个算法如果优化

骗分超级:骗分的超级意义就是不骗分,那个dj算法建议优化

0
0
傅文彬
傅文彬
新手天翼
新手天翼

这题很难,要先打好基础

0
0
我要回答