社区讨论

求助

P14923[GESP202512 八级] 猫和老鼠参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mkl6h2aq
此快照首次捕获于
2026/01/19 21:05
上个月
此快照最后确认于
2026/01/23 17:15
4 周前
查看原帖
求助,代码是冲着40分写的,但只得了10分,样例都对了,我也尝试调试过了
CPP
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int c[100005];
vector<pair<int,int> > v[100005];
long long dis[100005];
int vis[100005];
void dij(int n,int s)
{
    for(int i=1;i<=100004;i++)dis[i]=1e9;
    memset(vis,0,sizeof vis);
    dis[s]=0;
    for(int i=1;i<=n-1;i++)
    {
        int mini=-1,minn=1e9;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]<minn)
            {
                minn=dis[j];
                mini=j;
            }
        }
        vis[mini]=1;
        for(int j=0;j<v[mini].size();j++)
        {
            if(dis[v[mini][j].first]>dis[mini]+v[mini][j].second)
            {
                dis[v[mini][j].first]=dis[mini]+v[mini][j].second;
            }
        }
    }
}
signed main()
{
	ios::sync_with_stdio(0);
	cout.tie(0);
	cin.tie(0); 
    int n,m;
	cin>>n>>m;
	int a,b;
	cin>>a>>b;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i]; 
	}            
	      
	for(int i=1;i<=m;i++)
	{               
		int x,y,z; 
		cin>>x>>y>>z;
		v[x].push_back({y,z});
		v[y].push_back({x,z}); 
	}
	dij(n,b);
	long long ans=0;
	for(int i=1;i<=n;i++)
	{
		if(dis[i]<dis[a])ans+=c[i];
	}
	cout<<ans; 
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...