社区讨论
各位神犇,教教我这个零分菜鸟吧
P6880[JOI 2020 Final] 奥运公交 / Olympic Bus参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo1c86pe
- 此快照首次捕获于
- 2023/10/22 18:40 2 年前
- 此快照最后确认于
- 2023/11/15 09:01 2 年前
各位神犇,教教我这个零分菜鸟吧
以下是我的零分代码
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=5e5+7;
const int INF=0x3f3f3f3f;
struct Edge
{
int to,next,w;
}edge[maxn*10];
int n,m,cnt,a[maxn],s;
int head[maxn];
void add_edge(int u,int v,int w)
{
edge[++cnt].to=v;
edge[cnt].next=head[u];
edge[cnt].w=w;
head[u]=cnt;
}
int dis[maxn];
int vis[maxn];
struct Node{
int v,w;
bool operator<(const Node &B)const
{
return w>B.w;
}
};
void Dij()
{
for (int i=1;i<=n;++i) dis[i] = INF;
dis[s] = 0;
priority_queue<Node>Q;
Q.push(Node{s,0});
while(!Q.empty())
{
Node F = Q.top();
Q.pop();
int u = F.v;
vis[u] = 1;
for (int i=head[u];i;i=edge[i].next)
{
int v = edge[i].to;
if (!vis[v]&& dis[v]>(dis[u]+edge[i].w))
{
dis[v] = (dis[u]+edge[i].w);
Q.push(Node{v,dis[v]});
}
}
}
}
signed main()
{
cin>>n>>m;
int t=50005;
int u[t],v[t],w[t],d[t];
for(int i=1;i<=m;i++)
{
cin>>u[i]>>v[i]>>w[i]>>d[i];
}
long long ans=0x3f3f3f3f3f3f3f;
cnt = 0;
memset(head,0,sizeof(head));
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
s=1;
Dij();
int sum=dis[n];
for(int j=1;j<=m;j++)
{
add_edge(u[j],v[j],w[j]);
}
s=n;
Dij();
sum+=dis[1];
ans=min(sum,ans);
for(int i=1;i<=n;i++)
{
cnt = 0;
memset(head,0,sizeof(head));
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
for(int j=1;j<=m;j++)
{
if(i==j)
add_edge(v[j],u[j],w[j]+d[j]);
else
add_edge(u[j],v[j],w[j]);
}
s=1;
Dij();
sum=0;
sum+=dis[n];
cnt = 0;
memset(head,0,sizeof(head));
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
for(int j=1;j<=m;j++)
{
if(i==j)
add_edge(v[j],u[j],w[j]+d[j]);
else
add_edge(u[j],v[j],w[j]);
}
s=n;
Dij();
sum+=dis[1];
ans=min(ans,sum);
}
if(ans>=0x3f3f3f3f3f3f3f-1)
cout<<-1;
else
cout<<ans;
return 0;
}
请随意赐教
回复
共 0 条回复,欢迎继续交流。
正在加载回复...