蒟蒻求助!!!有奖!!!

P1608 路径统计

@[yangyuecong](/user/487959) 边可能重复,你没有判重
by EastPorridge @ 2023-01-06 17:17:23


@[EastPorridge](/user/230865) 谢谢(已关注)
by yyc_qwq @ 2023-01-06 17:18:49


@[EastPorridge](/user/230865) 怎么改?(我很垃)
by yyc_qwq @ 2023-01-06 17:21:43


@[yangyuecong](/user/487959) 写个 map 存下来,读完之后离线加边就可以了;;;
by EastPorridge @ 2023-01-06 17:23:37


@[EastPorridge](/user/230865) 好的
by yyc_qwq @ 2023-01-06 17:27:04


@[EastPorridge](/user/230865) 现在77了(2WA,1RE) ```cpp #include<iostream> #include<vector> #include<queue> #include<cstring> #include<map> using namespace std; const long long N=114514; const long long inf=0x3f3f3f3f; struct edge { long long v, w; }; struct node { long long dis, u; bool operator<(const node& a) const { return dis > a.dis; } }; vector<edge> e[N]; long long dis[N], vis[N],cnt[N]; priority_queue<node> q; map<node,int> mp[2000]; void dijkstra(long long n, long long s){ memset(dis, 63, sizeof(dis)); dis[s] = 0; q.push({0, s}); while (!q.empty()){ long long u = q.top().u; q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto ed : e[u]){ long long v = ed.v, w = ed.w; if (dis[v] > dis[u] + w){ dis[v] = dis[u] + w; cnt[v] = cnt[u]; q.push({dis[v], v}); }else if (dis[v] == dis[u] + w){ cnt[v] = cnt[v]+cnt[u]; } } } } int main(){ long long n,m; cin >> n >> m; for (long long i = 1; i <= m; i++){ long long u,v,w; cin >> u >> v >> w; if(mp[u][{v,w}]==0) { e[u].push_back({v, w}); mp[u][{v,w}]=1; } } cnt[1] = 1; dijkstra(n,1); if(dis[n]==inf){ cout << "No answer" << endl; }else{ cout << dis[n] << ' ' << cnt[n] << endl; } return 0; }
by yyc_qwq @ 2023-01-06 17:36:41


@[yangyuecong](/user/487959) 稍等,我给你调一下吧
by EastPorridge @ 2023-01-06 17:38:59


@[EastPorridge](/user/230865) 好心大佬,受我一跪
by yyc_qwq @ 2023-01-06 17:40:49


@[yangyuecong](/user/487959) ```cpp /* text */ #include<iostream> #include<vector> #include<queue> #include<cstring> #include<map> inline int read() { int x=0; char c=getchar(); bool f=0; for(;c<'0'||c>'9';c=getchar()) f|=(c=='-'); for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48); return x=f ? -x : x; } using namespace std; const long long N=114514; const long long inf=0x3f3f3f3f; struct edge { long long v, w; }; struct node { long long dis, u; bool operator<(const node& a) const { return dis > a.dis; } }; vector<edge> e[N]; long long dis[N], vis[N],cnt[N]; priority_queue<node> q; map<pair<int,int>,int> mp; void dijkstra(long long s){ memset(dis, 63, sizeof(dis)); dis[s] = 0; q.push({0, s}); while (!q.empty()){ long long u = q.top().u; q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto ed : e[u]){ long long v = ed.v, w = ed.w; if (dis[v] > dis[u] + w){ dis[v] = dis[u] + w; cnt[v] = cnt[u]; q.push({dis[v], v}); }else if (dis[v] == dis[u] + w){ cnt[v] = cnt[v]+cnt[u]; } } } } int main() { int n=read(),m=read(); if(m == 0) return puts("No answer"),0; for (long long i = 1; i <= m; i++) { int u=read(),v=read(),w=read(); auto t=make_pair(u,v); if(! mp[t]) mp[t]=w; else mp[t]=min(mp[t],w); } for(auto it : mp) e[it.first.first].emplace_back(edge{it.first.second,it.second}); cnt[1] = 1; dijkstra(1); if(dis[n]==inf){ cout << "No answer" << endl; }else{ cout << dis[n] << ' ' << cnt[n] << endl; } return 0; } ```
by EastPorridge @ 2023-01-06 17:50:49


@[yangyuecong](/user/487959) 你的判法有问题,然后 cin T 了,给你加了个快读才过。
by EastPorridge @ 2023-01-06 17:51:56


| 下一页