CN0202deXP @ 2024-11-30 23:00:21
2,3,6ac,其余wa
#include <bits/stdc++.h>
using namespace std;
struct tu{
int now=0;
int next=0;
int towhat=0;
int lenth=0;
}a[200001];
int rc[100001];
int ans[100001];
bool chk[100001];
int n,m,s;
struct cmp{
bool operator()(int a1,int b1){
return ans[a1]>ans[b1];
}
};
void dij(){
priority_queue <int,vector<int>,cmp> qp;
int tmp1=s;
do{
tmp1=rc[tmp1];
while(a[tmp1].now!=0){
if(a[tmp1].lenth+ans[a[tmp1].now]<ans[a[tmp1].towhat]) ans[a[tmp1].towhat]=a[tmp1].lenth+ans[a[tmp1].now];
qp.push(a[tmp1].towhat);
tmp1=a[tmp1].next;
}
tmp1=qp.top();
while(chk[tmp1]==true&&qp.empty()==false){
qp.pop();
tmp1=qp.top();
}
if(qp.empty()==true) break;
chk[tmp1]=true;
//cout<<qp.top()<<'\n';
qp.pop();
}while(qp.empty()==false);
return;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
int i;
memset(ans,9999999,sizeof(ans));
memset(chk,false,sizeof(chk));
cin>>n>>m>>s;
//cout<<'\n';
ans[s]=0;
chk[s]=true;
for(i=1;i<=m;i++){
cin>>a[i].now>>a[i].towhat>>a[i].lenth;
a[i].next=rc[a[i].now];
rc[a[i].now]=i;
}
dij();
for(i=1;i<=n;i++){
cout<<ans[i]<<' ';
}
}
by Ben_coding @ 2024-12-05 18:49:38
#include <bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int N=1e5+10;
const int M=2*1e5+10;
int n,m,s,idx,first[N],dis[N],vis[N];
struct edge{int v,w,next;}e[M];
void add_edge(int u,int v,int w){
idx++;
e[idx].v=v;
e[idx].w=w;
e[idx].next=first[u];
first[u]=idx;
}
void Dijkstra(int s){
priority_queue<pii,vector<pii>,greater<pii> >q;
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push({0,s});
for (int i=1;i<=n;i++){
int u=q.top().second;q.pop();
while (vis[u]){u=q.top().second;q.pop();};
vis[u]=1;
for (int j=first[u];j;j=e[j].next){
int v=e[j].v,w=e[j].w;
if (dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
q.push({dis[v],v});
}
}
}
}
int main(){
cin>>n>>m>>s;
for (int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
add_edge(u,v,w);
}
Dijkstra(s);
for (int i=1;i<=n;i++) cout<<dis[i]<<" ";
return 0;
}
by CN0202deXP @ 2024-12-07 17:26:11
谢谢佬%%%