题目链接:
题目大意:首先输入n,m,c;n代表点数,m是额外的边,c是层与层之间的权值。然后接下来n个数分别表示第i个点属于哪个层(层与层之间可互通),然后m行,每行三个数 x,y,v,表示点x到y权值为v求点1到点n的最短路。
题目思路:把每个层拆成两个点(点到相应层之间距离为0),注意是拆成两个点,原因很简单,如果只拆成一个点,那么如果点1属于1层,点2也属于1层,那么推出来1与2距离为0, 结果错误,所以拆成两个点,前一个点代表入点(点到层),都一个代表出点(层到点),然后SPFA或者堆优化dijkstra就行。
#include #include #include #include #include #include #include #include #include #include #include #include #include