求助dijkstra 78分

P1529 [USACO2.4] 回家 Bessie Come Home

[附提交记录](https://www.luogu.com.cn/record/70430958)
by Dream_weavers @ 2022-03-02 20:34:21


@[Dream_weavers](/user/572482) 请问你知道0x3f3f是多少么?如果不知道,可以 ```cpp cout<<0x3f3f<<endl; ``` 看一看
by 泥土笨笨 @ 2022-03-02 20:52:01


@[Dream_weavers](/user/572482) inf最好设为1e9这类超级大数。
by int233 @ 2022-03-02 20:58:28


@[泥土笨笨](/user/43206) 为什么我把INF改成999999999999还是没过?WA一个点
by Dream_weavers @ 2022-03-02 21:06:48


@[Dream_weavers](/user/572482) 你好,我是int233小号,我帮你调对了。 Code: ```cpp #include<bits/stdc++.h> using namespace std; const int INF=2147483647; const int N=1e5+5; int n,m; char ans; struct Edge{ int v,w; Edge(int v,int w):v(v),w(w){} }; struct Node{ int u,d; Node(int u,int d):u(u),d(d){} bool operator < (const Node &a) const{ return d<a.d; } }; int d[N],vis[N]; vector<Edge> adj[N]; void dij(int s){ for(int i=1;i<=200;i++)d[i]=INF; d[s]=0; priority_queue<Node>q; q.push(Node(s,0)); while(!q.empty()){ int ux=q.top().u; q.pop(); if(vis[ux])continue; vis[ux]=1; for(int i=0;i<adj[ux].size();i++){ int v=adj[ux][i].v; int w=adj[ux][i].w; if(d[v]>d[ux]+w){ d[v]=d[ux]+w; q.push(Node(v,-d[v])); } } } } signed main(){ cin>>n; for(int i=0;i<n;i++){ char u,v; int w; cin>>u>>v>>w; adj[(int)u].push_back(Edge((int)v,w)); adj[(int)v].push_back(Edge((int)u,w)); } dij((int)'Z'); ans='A'; for(int i='B';i<='Y';i++){ if(d[(int)i]<d[(int)ans]) ans=i; } cout<<ans<<" "<<d[(int)ans]; return 0; } ```
by Phigros_Light @ 2022-03-02 21:08:57


@[Dream_weavers](/user/572482) 因为999999999999这个数超过int范围了。你可以选一个int范围内的,并且比所有边权加起来都大的数字作为INF
by 泥土笨笨 @ 2022-03-02 21:09:06


感谢@[泥土笨笨](/user/43206) 和 @[int233](/user/333855) ,已经AC了,此贴结
by Dream_weavers @ 2022-03-02 21:10:49


|