很明显就是一道最短路的题,且为多源最短路,用m次dijkstra算法求每个垃圾箱到各个居民点的最短距离,根据题意更新最优解。
#include <iostream>
#include <cstring>
#include <vector>
#define N 1020
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k,ds,ansid,ansd,ansum;
vector<int> ver[N],we[N];
int read(){//读入边,垃圾箱编号为i+n
char s[10];
scanf("%s",s);
int i=0,res=0,flag=0;
if(s[0]=='G') i++,flag=1;
for(;s[i]!='\0';i++) res=res*10+s[i]-'0';
if(flag) res+=n;
return res;
}
void dijk(int s){//单源最短路
int dist[N],vis[N]={0};
memset(dist,0x3f,sizeof dist);
for(int i=0;i<ver[s].size();i++)
dist[ver[s][i]]=we[s][i];
dist[s]=0;
vis[s]=1;
while(1