1 条题解

  • 0
    @ 2024-6-9 21:22:55
    #include<bits/stdc++.h>
    using namespace std;
    const int N=100005;
    typedef long long ll;
    typedef pair<ll,int> pi;
    ll dis[N];
    int T,n,m,k,d[N];
    vector<int> g[N],v[N],e; 
    void add(int x,int y,int w)
    {
    	g[x].push_back(y),v[x].push_back(w);
    	g[y].push_back(x),v[y].push_back(w);
    }
    void dij()
    {
    	priority_queue<pi,vector<pi>,greater<pi>> q;
    	for(int i:e)
    		q.push(pi(0,i));
    	while(!q.empty())
    	{
    		pi x=q.top();
    		q.pop();
    		int s=x.second;
    		if(dis[s]>=0||--d[s]>=0)
                continue;
    		dis[s]=x.first;
    		for(int i=0;i<g[s].size();i++)
    			q.push(pi(dis[s]+v[s][i],g[s][i]));
    	}
    }
    int main()
    {
    	cin>>T;
    	while(T--)
    	{
    	    memset(dis,-1,sizeof(dis));
    	    for(int i=1;i<=n;i++)
    			g[i].clear(),v[i].clear();
    	    e.clear();
    		cin>>n>>m>>k;
    		for(int i=1,x;i<=k;i++)
    			cin>>x,e.push_back(x);
    		for(int i=1;i<=n;i++)
    			cin>>d[i];
    		for(int i:e) 
    			d[i]=0;
    		for(int i=1,x,y,w;i<=m;i++)
    			cin>>x>>y>>w,add(x,y,w);
    		dij();
    		cout<<dis[1]<<endl;
    	}
    }
    
    • 1

    信息

    ID
    806
    时间
    4000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    2
    上传者