分層圖,每個轉彎定義為乙個操作,所以建立乙個上層全是x軸,下層全是y軸,兩層之間連一條權值為1的邊代表轉彎的代價。。挺簡單的其實
#include#include#include#include#include#includeusing namespace std;typedef long long ll;
const int inf = 1e17 + 11;
const int maxn = 3e5 + 333;
const int n = 1e5 + 11;
ll dis[maxn];
int vis[maxn];
struct node g[maxn * 2];
int z;
int head[maxn];
void add(int be, int en, ll len)
bool operator <(const node a, const node b)
void dij(int be)
dis[be] = 0;
priority_queueque;
node ccc;
ccc.len = 0;
ccc.p = be;
que.push(ccc);
while (que.size())
} }return ;
}struct cn que[maxn];
bool cp1(cn a, cn b)
bool cp2(cn a, cn b)
int n, m;
int main()
scanf("%d%d", &que[s].x, &que[s].y);
scanf("%d%d", &que[t].x, &que[t].y);
que[s].id = s;
que[t].id = t;
int len = m + 2;
sort(que, que + len, cp1);
for (int i = 1; i < len; i++)
} sort(que, que + len, cp2);
for (int i = 1; i < len; i++)
} for (int i = 0; i < m; i++)
add(s, s + n, 0);
add(s + n, s, 0);
add(t, t + n, 0);
add(t + n, t, 0);
dij(s);
if (dis[t] >= 1e13 )
else
return 0;
}
SHOI2012 回家的路
shoi2012 d2t1 2046 年 oi 城的城市軌道交通建設終於全部竣工,由於前期規劃周密,建成後的軌道交通網路由2n2n條地鐵線路構成,組成了乙個nn縱nn橫的交通網。如下圖所示,這2n2n條線路每條線路都包含nn個車站,而每個車站都在一組縱橫線路的交匯處。出於建設成本的考慮,並非每個車站...
P3831 SHOI2012 回家的路 題解
題目傳送門 解法 1 每兩個點都連邊,跑裸的最短路。顯然,n 和 m 非常大,暴力連邊會 tle 和 mle。解法 2 正解 首先,對答案產生貢獻的只有換乘站,所以我們只用連兩種邊 乙個換乘站看作 2 個節點,連邊,邊權為 1 站內換乘 將 x 相等的換乘站相連,y 相等的換乘站相連。其中,起點和終...
題解 P3831 SHOI2012 回家的路
什麼叫分層圖最短路,我不會 kk 感覺自己做法和其他題解不大一樣所以過來發篇題解了。未刻意卡常拿下最優解 就是說給你乙個 n times n 的網格圖和 m 個可換乘點,然後你只能在同一行或同一列 如果在行上移動,就不能在列上移動 反之同理 上移動,除非這個點是可以換乘的。每次走一格花費 2 費,換...