需要从每个点出发到达各个站台各一人,然后还要回到ccs。
思路:出发的时候,正常用dijkstra做,返回时的最短路径可以将原map反转一下
之前都是用的二维数组,此题点是1e6,所以我用的vector,不过对时间和空间都不是很满意。。。。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#define N 1000005
#define inf 1000000005
using namespace std;
int n,m,num[N];
vector <int> dp[N],head[N];
struct edge
{
int u,v,value;
}Edge[N];
bool vis[N];
void init()
{
for(int i=1;i<=n;i++)
{
vis[i]=false;
num[i]=inf;
dp[i].clear();
head[i].clear();
}
}
int dijkstra()
{
int MIN,next;
num[1]=0;
for(int i=1;i<=n;i++)
{
MIN=inf;
for(int j=1;j<=n;j++)
{
if(!vis[j] && MIN>num[j])
MIN&