Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #define pb push_back
- #define mk make_pair
- #define pii pair<int,int>
- #define S second
- #define F first
- #include <algorithm>
- #include <set>
- using namespace std;
- //хех, здарова
- int n,m,bf[3],lt=-1;vector<pii>a;vector<int> d,p;vector<vector<pii>>nt;//lt - указатель на последний элемент
- void swap(pii q, pii k) {
- int tmp=a[q];
- a[q]=a[k];
- a[k]=tmp;
- }
- pii sudo() { //ну типа get root, ну ты понел
- pii res=a[0];
- a[0]=a[lt];
- bool q,e; int i=0; --lt;
- while (((q=a[i]>a[i*2+1])||(e=a[i]>a[i*2+2]))&&(i<lt)) {
- if (!(lt&1)) {
- if (i>=lt-1) break;
- }
- if (q) { // слева держим минимум
- swap(i,i*2+1); i=i*2+1;
- }
- else if (e) {
- swap(i,i*2+2); i=i*2+2;
- }
- }
- if (!(lt&1)) {
- if (a[lt-1]>a[lt]) {
- swap(lt-1,lt);
- }
- }
- return res;
- }
- int pred(int b) {
- if (b&1) return (b+1)/2-1;
- return b/2-1;
- }
- void add(pii o) {
- ++lt;
- a[lt]=o;
- int j=lt;
- if (!(lt&1)) { // слева держим минимум
- if (a[lt-1]>a[lt]) {
- swap(lt-1,lt);
- j=lt-1;
- }
- }
- while(a[j]<a[pred(j)]) {
- swap(j,pred(j));
- j=pred(j);
- }
- }
- int main() {
- // F - расстояние до вершины, S - номер вершины
- scanf("%d%d",&n,&m);a.resize(n+1);d.resize(n,-1);p.resize(n,-322);nt.resize(n);
- for (int i=0;i<m;++i) {
- scanf("%d%d%d", &bf[0],&bf[1],&bf[2]);--bf[1];--bf[0];
- nt[bf[0]].pb(mk(bf[2],bf[1]));nt[bf[1]].pb(mk(bf[2],bf[0]));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement