Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- #############################################################################################%####################################%###############
- #--%###*-=+-####--+::::=##%-:*#=:%#*-*#%-::+########%=::+##:=%#*-=#=-##:::::+%-:###-=####-:::=%##-::::*##=:=#####-::*%::::::+#-+###-::*##%--#%%--#
- #::%###*:-*:-##=:#=..::-###=.*#-.*#=:**:.:..:#####*#:.:::##.-##+.+#=:##...::+%:.=#%:-####:.::.:%#..:::*#%::.####-.::-%:....:+*:=#*..:.:=##:.=##:-#
- #::####*:-%::%#-:%=.#######*.+#:.:%:.%-:*##+:+#####-:#%##*#.-##+:=#=:*#.:%###%::.*%:-###%::##=:*#.-#####+:#.+##::####*##-:%##*.=#-:##%-:#%::.##::#
- #::####*:-#+:*#:=#=.::-*####:=*.=:#:-#::%##*.=#####::######.::::.=#=:##..:--#%::--#:-####:.##::##.::-=##-:#:=#+:=#######-:%##*.=%:-###+.=%::-:#::#
- #::####+:-#*:+*.*#=:::-#####:-=:+.*.+%::##%*.=*--=#::#####*..::..=#=:*#..::-#%:.+.+:-####:..:.+##:::-=##:=#-:*+:=#######::###*.=#:-###+:-#::*.*.-#
- #::%###+:-##:-::%#=:########:::-#:-:%#::*##*.+#--=#::*###*#:-##+:=#=:*#::%###%::%=.:-####:.#::*##:-####*.....#*:-#######-:###*:=%-:###=:+%::#-.::%
- #::*****:-##-..+##=.+***####=..##..:##*::%+.:####*#+::#*:##.-##*:=#=:##.:*#**%::#*:.-###%:.##:-##.:***#::###.-%-:-#+-%##-:###*:=#+..#+.-%#::#%:.:#
- #:..::+*:=##%::*##=:...:%##%#::##=:-###*:..:#########:::-#*:-##*:+%=:##:..::=%::##+:-###%-:#%=:=%:....+:-###--*#=:.:=###-:###*:+*#*.::-###:-##+:-#
- ################################################################################################################################################%#
- ####################################################%#################################################################%#########%#################
- %#%#%@%@@%%%%%*%@%#%%%%@@%@@@@@@#%%#***+++@@@@@@@@@@*@@%@@@@@@%#--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:*@@@@@@@%@@@@@@@@
- ##%%%@#@@@%%%%###@%%#%@@@@%#@@@@+%%++*%=##%@@@@@@@@@@-#@@@%@@@%#=:@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:*@@@@@@%%=@@@@@@@
- -#@@@@%%%%#%%%@%#####%##%#%*##+*+#@#*%%%+%%###@@@@@@@@+.-%@@@@%#-=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:+@@@@@@=:@@@@@@@@
- --#@@#*%@@@@@@%%@%%#%%%***%@%##*++#+%%%%*=**#%@@@@@@@@@%+:.:-=*#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+:@@@@-.:@@@@@@@@@
- :-:*%@@%%%@@%@%%%@#%*%*#%###%%%##*%#**=*+=-+=#=**@@%%*++#@@*=::.:.:::.:-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@%%=-::-%@@@%@@@@@@
- +--:*@@@@@@@@@@@@@@@@@%#%#%#%%%%%%#**+++=+**%#=-%%#*+++=%@**%@@@%%+-....::=@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+:::::.-#@@@@@@@@@@@@@
- %+:::+@@@@@@@@@@@@@@@%@%#*#%@%*+*%@%@#*+*%%#%%@%%#++*+=#@%*@%@#-=#++*%%-...:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@+:::::*%#-@@@@@@@@@@@@@@
- #%##%%%@@@@@@@@@@@@@@@%@@@@@@%#%%@@%%@#+%%@*+##%%%#*@+*@%@@@@%#::=+++++*%:.::#@@@@@@@@@@@@%=#@@@@@@@@@@@@@@+@#@@@@@@@@@@%+::.+@*#%-:@@@@%@@@@@@@@@
- %%%###%%%%###%%%@@@@@@@@%%@%%%#@%%@@@@%%@#%%=*#=++*%%%*@+#@%%@#-::%*%#*=+%=:..%@@@@@@@@@@@%==-=#@%@@@@@@%===*@@@@@@@@@%@#::-%#*+%%:+@@@@@@@@@@@@@@
- %#%%##%#%@%#%%%%#%@@@@@%%%@@%%%%@%@%@@@@%@%#*=*=*##*#%%+*@@#*#%#::-#===:-+@:.:*@@@@@@@@@@@%+---==*@@%@@*==--=@@@@@@@@@@%*::%+-:*@+:%@@@@@@@@@@@@@@
- %%#%%%###%%%#%###%@#=+=%@@%%@@%@%%@@@@%%%%@@@%@@%#+%###*%%@%@#%#+:.=@#%#**@::.*@@@@@@@@@@@%#=-=-===*@%*-=====#@@@@@@@@@#=:*###%@#:-@@@@@@@@@@@@@@@
- %#@#%%%%%%%%%##%#%#@*+++%%@@@@@@#*@@@@@%@@@@@#%@@@**@%*%%@@@@#%@#+:::%*+++@=:.#@@@@@@@@@@@@#*==---=-*#*-==-=-=@@@@@@@@%#::@+*%%-.-@%@@@@@@@@@@@@@@
- %##%%%%%%#%%#%%#%#%#@*+++@@%@@@@@@@@@@@@@@@@@@@@%%#%@%@%@@@%*#%#@%*:::=@+*@+::@@@@@@@@@@@%%@%#+==-===@*===-=*@@@%@@@@@#*:+%#+:.:#@%@@@@@@@@@@@@@@@
- %##%%%%%###%#%%#%#%#%%*+*+%@@@@@@@@@@@@@@@@@@@@@@@%#@@@@@@@%@%%%#%@%+:.:-#@*::@@@@@@@%%%%%%%%@%#*=--=@*--=##*#@@@@@@@##=:*:-=#%#@@@@@@@@@@@@@@@@@@
- ##%%#%%%%@%%@%%@%%@@%%@*+*=%@@@@@@%@@@@@@@@@@@@@@@%@@@@@@@@@%@###@%%@%*::-@#=.%@@@@%%##%%%###%%%@%*+=@==#*+*%*++#@@@%#+.=@@*##+++%%@@@@%%%%%%%%%%%
- #%#%%%@#%%%%#%%@###%#%%%++*+#@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@%%%%@**@@@%*%%#:+@@%%#%#*++##%#+++++*%%%*++++++*@%@@@##=.-%@%%#%++++@@@@%%%%%%%%%%%%
- %@%#%#@%%@%%%%%%%%%%#%%@%%%#=*@@@@@@@@@@@@@@@%@@@@%@@@@@@@@@@@%#%%%#@@@%@%@@##:-%%#*+*#%%%*+++++++++++*++++++++%%##=:.*@@@#%%#++++@@@%%%######%%%%
- #%%%%@%%%%#%%%@@@@@%%%%%%%%%@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%@@%@@%#%%#%%*%@##*-:=+*%%%#*++++++++++++*+++++++++#+:+#@@@@@@@@%*+++@@@%%%##########
- %%%%@@@@%%%%%#%#%##%%%%%%#%%%#+==***%@@@@@@@@@@@@@@@@@@@@@@@@@@@@***##*#%%%%%%@%%%#*#@%*+++++++++++++++%++++++++=#*++%@@%@@@@%*+++@@%%%%##########
- @@@%%%#%%###%%%%%#######%%%%%##+==#=====*+#%@@@@@@@@@@@@@@%@@@@+*#*+=#%@%#%%%%%%#%%%%%*+++++++**+++++++**+++**++++@+++%%@@@@@@#+=%%%%%%%##########
- ####%%%%%#%%%%%#%@%#####%%%%%%%*=+=#=====#+==*@@@@@@@@@@@**@@@###%@%%@@#%%%%%%%%##%%@*++++++*%++++++++++*++++###*+#*++*@@@@@%%%*@%%%%%%###########
- %##%%%%%%##%%%%##%%######%%#%%%#++=+%=====#===+%@@%%@@@@@%#@@@%%%%%@@%#%%%%%%%%%%%%%%++=++#%#*++++++++++*+++++#==##++++@%@@%%%%####%%##%%######*##
- %####%@%#%#%%%%###@%####%###%%%%#====*=====#==++#@@@@@@@@@@@@@@#%%%@%#%%%%%%%%%####%%#%%*===*#++++++++++*+++++#===+%+++%%%%%%%%%%#####%%%%%%%%%%%%
- %####%#%#%#%%%%###%@######%%%%%%%+===#+====+%+=+*%@@@@@@@@%%#*%%@@@%%%%#%#%%%%%#++*#%=---==-=+%*++++++++++++++#=====%++*%%%%%%%%%#%###%%%%%%%%%%%@
- %######%%%%%%%#%##%%%%%####%%%%%%#++==#======#=++*%@@@@@@@@@@%%@@@%%##%#%%%%##*++++#*-===---=-==##++++++++++**==-===%++#%%%%%%%%%%%%%#%%%%%%%@@@@@
- %####%%#%%%%###%%%#%%%#%###%@%%%%%++=++#=====**=+++%@@@@@@@@@@@@@##%#%%%%%%#%*+++++%+==-===--===-=*%*+++++#*==-=--==%++#%%%%%%%%%%%%%%%#*%@@@@@@@@
- %#######%@%%@@@%%#%%%%#%%#%%%%%%%##+*==**==+==*==+*+@@@@@@@@@@@@%%%%#%%%%%%#+++++++%+=========--====+%%**-=--====-==%++#@@%@%%%%#*%%%%%#%**+*@%@@%
- %%#%%#%%#%@#****#%@@@@@%%@@@@@@@@@@@@@@@@%%#***+*++++%@@@@@@@@@%%%%%%%#%%%%*+++++++%+===-==========--====---=====-=+%++#@@@%%+++###%#%-=+#=-#%@@@#
- %%##%%%#%##@##*******##%%%%%%#####**#**#*****##%@@%%%#@@@@@@@@%%%%%%%%%#%#*++++++++##=-====---=---==--==--=======-=*#++@@%#=*+++--:-=-+-==#*=++*=-
- #%##%%%####%@%#%%%%%%%%%%%#***********************#%@@@@@@@@@@%%%%%%##%##*++++++++++%=---=--===--===========-==-==-%#+*@#**%#%%%@#*%%%%%#%@@%-*==*
- %@#********##%%%%%%%%%%%##****************************%@@@@@@%#%%%%%#%%%*+++++++++++*%*-=-=-=-+%=-===========-*#==-%*=%+==%%%%%@@@##@%%@@@@@%@%%%%
- %%%%%%%%%%%%%%%%%%%%%%%#********************************#%@@@%##%#%%#%%*+++++++++++*++#%==--=%*%============--%%=-*#+%%%%%%%@@@@%@%@@@@@@@@@%@@@%@
- %%%%%%%%%%%%%%%%%%%%%%%#*******************************##%%%%#%%%%%%%%*++++++++=+#@#+++%%=-+#+*%====-=----===-##*#++++%%%%%@%%%@@@@@@@@@@@@@@@@@@@
- %%%%%%%%%%%#@%%%%%%%%%%###****************************#%%%#%#%%%%%%%%#++++++++#@%###++**###++++##-====--=====#**%*++++*@@@%##%@@@@@@@@@@@@@@@@@@@@
- %%%%@%*++++++%%%%%%%%%%%%%####*************####%%#%#**#%###%%%#%%%%%#+++*#%@%#*+++#%+%++++++++++#%==-===--=+%+++++++#==#%%%%@@@@@@@@@@@@@@@@@@@@@@
- %%@#+=+++++++*%@@@%%*+++*@%%%%%%%%%##%%%@@%%%#++==**+%#########%%@%%%#%%%%#%*+++++***=+++++++++++*%#===-==@*++++++++*%++%%@@@@@@@@@@@@@@@@@@@@@@@@
- @#+=+++++++++++++++=++++++%%%%%%%%%%%%%%###%#%*====##%##########%%%%%#%###%#+++=*++++++++++++++++++#@*-+%*+=+++++++++@++#@@@@@@@@@@@@@@@@@@@@@@@@@
- #+++++++++++++++++++++++++%%%%%@@@%##%%@#%%%%##+=*%##########%#@%%%%%%%%%%%++++#++++++++++++++++++++++#++++++++++++++*#++@@@@@@@@@@@@@@@@@@@@@@@@@
- #+++++*++++%++++++++++++++#@%@%%%#%##%%%%%%#%#%#%##############@%%%%%%%%%#++++*=++=+++++++++++++++++++*+++++++++++++++%++%@@@@@@@@@@@@@@@%%@%@@@@@
- ##%%%#++++#=++++++#+++++++*%#%%@%#######%#%%#%%%###%##########%#%%%%%@%#%*+++**=+++++++++++++++++++=++#+++++++++++++++%++#@%@@@@@@@@@@@@@@@@@%@%%#
- %%%%%++++%+++++++*@%#+=+++*%%%#%@#%%###%%@%#%%##############%%%%%%#%@%#%*++++*++++++++++++++++++++++++#+++++++++++++++#*+#@@@@@@@@@@%%#########%%%
- %%%@%*++*++++++++#@%@%####@%%%#%%@#%####%#%%%#%##############%%%%%%%@%%%++++*+++++++++++++++++++++++++#++++++++=++++++#%%@###*###%%%%%@@@@@@@@@@@@
- %%%@##++*+++++++*%@%%@@%%%@%%##%%%%##%%%#%%%%################%%#%%#@%%%#+++++=++++++++++++++++++++++++#+++++++*+++++++#%%%@%%%%#%%@%#%@@@@@@@@@@@@
- %%%@%##+*++++++#%@%%##@%%%%##%%%#%@%#%#%#%%#################%@%%#+=*##%%*++++++++++++++=+++++++++++=+=#+++++++*+++++++#@%%%%##%@@@@@@@@@@@@@@@@@@@
- %%%%@%##**++##%%%##%##%@%%#%#%%##%#@%#%%%#############%######+--====%%#%#+++++++++++++*+++++++++++++++#++++++**+++++++##***#%#%@@@@@@@@@@@@@@@@@@@
- %%%%%@%#%##%##%%##%#%%%%%#%%#%%%%%##@%#@%########%###%@#####==-======@%%#+++++++++++++#=++++++++++++#=*%+++++#++++++++%#*#%@@@%@@@@@%@@%%@@%%@@@@@
- %%%%%%@%#%%%%@%##%%#%%%%%@%##%%%%%%%%%%%###########@%#%####=--=-=-=*%#@#%*++++++++++++@*++++++++++*+==-=##+++@*+++++++%%@%%@@@@@@@%%@%%%%%%@@@@@@@
- %%%%%%%@%#%@%#%%%#%%##%%##@%#%%%%%#%#%%#%###%###%@###%%###=======+@*+=#@%%+++++++++++%*%+++++++=*#-=--====@+*+%+++++++%@@@@%%%%%%%%%%@@%@@@@@@@@@@
- %%%%@%%#%%%%@%%%%%%%######%%%##%%#%%#@%######@@######%%%#=-=--=%%#+-===*@%#++++++++%+==#*++++=*%=-======-====-+%*+++++@%%%@@@%%%%%@%%@@@@@@@@@@@@@
- @@#####%###%#%#%%%%%####%##%@%#%%%@%#%%%%%%##########%%*=-==#@#%==-=-==-+%@+++++##===-==@+++#*==-=======-==--===%#+++##@@@@%%%%%%%%%@@@@@@@@@@@@@@
- %###%%%%##%%%#@%%%%%%%%##%#%%@%@%#%##%###############%#%%##%#*---=-==--===*%###==-====-=+%%=----=-=====--===-==-=%%++@=%@%%%%%%%%%@@@@@%@@@@@@@@@@
- %%%############@#%#%%%%#%#%#%@%#%###########################==-======--======-===--===--===--==========-----======#%%-=+%%%@@%%%@@@@@@@@@@@@@@@@@@
- %%%%%#########%#%#%%%%%%%#@@###############################*=====-------=--==--==---==-=====-============-=-=======---==%@@%%%%%%@@@@@@@@@@@@@@@@@
- %%%%%##########%#@#%%#%%@%##%##########################%###==-=====------======-=-=----=-#=====-===-=--=====--=--======-@@@@@@@@@@@@@@@@@@@@@@@@@@
- %%%%%#########%%##%%%#%%##################################*========------=======+===---=#%==---=-==@==-===-*==-=-======-%@@@@@@@@@@@@@@@@@@@@@@@@@
- #%%%%#########%##%%%#@################################%###=-==========---=-====*%===-==*%%==-==-==@#%-=--==%+-===-====--#@@@@@@@@@@@@@@@@@@@@@@@@@
- #%%%%%%########%#%#@%################%##################%*=====-===-===--=-==-#%%--=-=*##%+-=====@*#%@---==%%-==--=====-*@@@@@@@@@@@@@@@@@@@@@@@@@
- #%%%%%%%########%#@###################################%##=-======-%====--=-==%#%+=-=-@#*%%*-=--+%*++##%*-==%%%---=----=-*@@@@@@@@@@@@@@@@@@@@@@@@@
- #%%%%%%%########%###############%@%%##%#################*-========@%+==-==-*@+%@=-=%%*++%%#==*%#++=++%%%%*@#%%#--======-*@@@@@@@@@@@@@@@@@@@@@@@@@
- #%%%%%%%######%%%############%@%#%#@####################=-=======+##@*-==@@**=%%###*+=++##%%%#*+++++++*#%%*+###@+=====-=%@@@@@@@@@@@@@@@@@@@@@@@@@
- */
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- const ll MOD = 1E9 + 7;
- const int INF = 1E9; const ll INFLL = 1E18;
- struct Seg {
- int n;
- vector<ll> seg;
- vector<multiset<ll>> leaf;
- Seg() {}
- Seg(int n) {
- seg.resize(4 * n, INFLL);
- leaf.resize(4 * n);
- }
- void add(int p, int l, int r, int i, ll x) {
- if(l == r) {
- leaf[p].insert(x);
- seg[p] = *leaf[p].begin();
- return;
- }
- int mid = l + (r - l) / 2;
- if(i <= mid) {
- add(p * 2, l, mid, i, x);
- } else {
- add(p * 2 + 1, mid + 1, r, i, x);
- }
- seg[p] = min(seg[p * 2], seg[p * 2 + 1]);
- }
- void remove(int p, int l, int r, int i, ll x) {
- if(l == r) {
- leaf[p].erase(leaf[p].find(x));
- seg[p] = (leaf[p].size() ? *leaf[p].begin() : INFLL);
- return;
- }
- int mid = l + (r - l) / 2;
- if(i <= mid) {
- remove(p * 2, l, mid, i, x);
- } else {
- remove(p * 2 + 1, mid + 1, r, i, x);
- }
- seg[p] = min(seg[p * 2], seg[p * 2 + 1]);
- }
- ll query(int p, int l, int r, int i, int j) {
- if(l == i && r == j) {
- return seg[p];
- }
- int mid = l + (r - l) / 2;
- ll wochien = INFLL;
- if(i <= mid) {
- wochien = query(p * 2, l, mid, i, min(j, mid));
- }
- if(j > mid) {
- wochien = min(wochien, query(p * 2 + 1, mid + 1, r, max(i, mid + 1), j));
- }
- return wochien;
- }
- };
- vector<ll> dijkstra(int source, vector<vector<array<int, 2>>>& adj) {
- vector<ll> wochien(adj.size(), INFLL);
- wochien[source] = 0;
- priority_queue<array<ll, 2>, vector<array<ll, 2>>, greater<array<ll, 2>>> pq;
- pq.push({0, source});
- vector<bool> seen(adj.size());
- while(pq.size()) {
- array<ll, 2> x = pq.top(); pq.pop();
- /* if(seen[x[1]]) {
- continue;
- } */
- // seen[x[1]] = true;
- for(array<int, 2> i : adj[x[1]]) {
- if(!seen[i[0]] && wochien[x[1]] + i[1] < wochien[i[0]]) {
- wochien[i[0]] = wochien[x[1]] + i[1];
- pq.push({wochien[i[0]], i[0]});
- }
- }
- }
- return wochien;
- }
- vector<int> cc;
- int get(int x) {
- return lower_bound(cc.begin(), cc.end(), x) - cc.begin();
- }
- int n; int m;
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cin >> n >> m;
- vector<array<int, 2>> barns(2 * n);
- for(int i = 0; i < 2 * n; i++) {
- cin >> barns[i][0] >> barns[i][1];
- }
- map<int, vector<array<int, 2>>> mpX;
- for(int i = 0; i < 2 * n; i++) {
- cc.push_back(barns[i][1]);
- mpX[barns[i][0]].push_back({barns[i][1], i});
- }
- sort(cc.begin(), cc.end());
- vector<vector<array<int, 2>>> adj(2 * n);
- for(int i = 0; i < m; i++) {
- int u; int v; int e;
- cin >> u >> v >> e;
- u--; v--;
- adj[u].push_back({v, e});
- adj[v].push_back({u, e});
- }
- vector<ll> dist = dijkstra(0, adj);
- vector<ll> dist2 = dijkstra(2 * n - 1, adj);
- Seg seg1(2 * n);
- Seg seg2(2 * n);
- Seg seg3(2 * n);
- Seg seg4(2 * n);
- for(int i = n; i < 2 * n; i++) {
- int y = get(barns[i][1]);
- seg1.add(1, 0, 2 * n - 1, y, dist2[i] + barns[i][0] + barns[i][1]);
- seg4.add(1, 0, 2 * n - 1, y, dist2[i] + barns[i][0] - barns[i][1]);
- }
- ll wochien = INFLL;
- for(pair<int, vector<array<int, 2>>> i : mpX) {
- for(array<int, 2> j : i.second) {
- int y = get(j[0]);
- if(j[1] >= n) {
- seg1.remove(1, 0, 2 * n - 1, y, dist2[j[1]] + i.first + j[0]);
- seg4.remove(1, 0, 2 * n - 1, y, dist2[j[1]] + i.first - j[0]);
- seg2.add(1, 0, 2 * n - 1, y, dist2[j[1]] - i.first + j[0]);
- seg3.add(1, 0, 2 * n - 1, y, dist2[j[1]] - i.first - j[0]);
- } else {
- wochien = min(wochien, dist[j[1]] + min({seg1.query(1, 0, 2 * n - 1, y, 2 * n - 1) - i.first - j[0], seg2.query(1, 0, 2 * n - 1, y, 2 * n - 1) + i.first - j[0], seg3.query(1, 0, 2 * n - 1, 0, y) + i.first + j[0], seg4.query(1, 0, 2 * n - 1, 0, y) - i.first + j[0]}));
- }
- }
- }
- cout << wochien << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment