注意n的范围很大,为1e5:k的范围只有100。 正常思路是从每个点出发跑bfs,这样肯定会T。可以逆向思维,从每种类型的物品出发跑bfs,记录每种类型的物品到达所有城市的最短路径。对于每一个城市,取最小的s个即可。 代码: #pragma #include<bits/stdc++.h> usingnamespacestd; typedeflonglongll; typedefunsignedlong...
n个点,m个双向边; 一共K中食品,每个点只能提供1种;至少携带s种不同的食品,点u->v 需要花费d(u,v);d(u,v)是最短路u->v,的开销——开销等于该最短路的路径中的边数。每个点有一种食品,食品总的种类数不超过K个,求从每个点出发找至少种食品的最小开销。题目看着像是最短路,起个名字叫做类最短路题目!
ll lcm(ll a,ll b){returna/gcd(a,b)*b;}constintdir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};structnode{intx,y,id; node(inta,intb,intc):x(a),y(b),id(c){} };structnode1{intx,y,id,steps; node1(inta,intb,intc,intd):x(a),y(b),id(c),steps(d){} };intn,...