题意:给你单向公交车,求出1到n的最小换乘。
思路:这个题目就是建图带点思维,怎么建图呢,把每条公路的前面的站点与后面的每个站点连单向边,并且让单向边的权值为1,然后dijkstra求出最短路即可。
#include <bits/stdc++.h>
#define pi pair<int,int>
#define mk make_pair
using namespace std;
const int inf = 1e9+10;
int n,a[505];
char aaa[5005];
int vis[505],d[505];
vector<pi>G[505];
void dij()
{
priority_queue<pi>q;
for(int i=1;i<=n;i++)vis[i] = 0,d[i] = inf;
d[1] = 0;
q.push(mk(0,1));
while(!q.empty())
{
pi tmp = q.top();
q.pop();
int u = tmp.second;
if(vis[u])continue;
vis[u]=1;
for(int i=0;i<G[u].size();i++)
{
int v = G[u][i].first;
int w = G[u][i].second;
if(d[v] > d[u] + w)
{
d[v] = d[u] + w;
q.push(mk(-d[v],v));
}