超时0.001秒,求助卡常
  • 板块灌水区
  • 楼主老子是北瓜
  • 当前回复15
  • 已保存回复15
  • 发布时间2020/8/13 22:38
  • 上次更新2023/11/6 20:22:31
查看原帖
超时0.001秒,求助卡常
121813
老子是北瓜楼主2020/8/13 22:38

题目由于一些原因没法放出来

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector> 
#include<algorithm>
#include<queue>
using namespace std;
int n,m;
vector<vector<pair<int,int> > >g1(10002);
vector<vector<pair<int,int> > >g2(10002);
priority_queue<pair<int,int> > q;
bool vis[10002];
int ans[10002];
inline void mem(){
	memset(vis,0,sizeof(vis));
	for(int i=0; i<=10000; ++i)
		ans[i]=999999999;
	ans[1]=0;
}
int main(){
//	freopen("invitation.in","r",stdin);
//	freopen("invitation.out","w",stdout);
	long long sum=0;
	scanf("%d%d",&n,&m);
	for(int i=1; i<=m; ++i)
	{
		int x,y,w;
		scanf("%d%d%d",&x,&y,&w);
		g1[x].push_back(make_pair(y,w));
		g2[y].push_back(make_pair(x,w));
	}
	mem();
	vis[1]=1;
	q.push(make_pair(1,0));
	while(!q.empty())
	{
		pair<int,int> u=q.top();
		q.pop();
		if(u.second!=ans[u.first]) continue;
		for(int i=0; i<g1[u.first].size(); ++i)
			if(ans[g1[u.first][i].first]>ans[u.first]+g1[u.first][i].second){
				ans[g1[u.first][i].first]=ans[u.first]+g1[u.first][i].second;
				q.push(make_pair(g1[u.first][i].first,ans[g1[u.first][i].first]));
			}
	}
	for(int i=1; i<=n; ++i)
		sum+=ans[i];
	mem();
	q.push(make_pair(1,0));
	while(!q.empty())
	{
		pair<int,int> u=q.top();
		q.pop();
		if(u.second!=ans[u.first]) continue;
		for(int i=0; i<g2[u.first].size(); ++i)
			if(ans[g2[u.first][i].first]>ans[u.first]+g2[u.first][i].second){
				ans[g2[u.first][i].first]=ans[u.first]+g2[u.first][i].second;
				q.push(make_pair(g2[u.first][i].first,ans[g2[u.first][i].first]));
			}
	}
	for(int i=1; i<=n; ++i)
		sum+=ans[i];
	cout<<sum;
	return 0;
} 

如果不撤掉STL能过么

2020/8/13 22:38
加载中...