社区讨论

各位神犇,教教我这个零分菜鸟吧

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 条回复,欢迎继续交流。

正在加载回复...