大学連携アルゴリズムウィンターアカデミー第9回(DQ,Daestra)
13719 ワード
マルチアウトレットアルゴリズム
優先キュー
お尻は完全にバイナリツリーです.
c++ : priority_queue
O(logn)演算で挿入を削除できます
通常のキューと同様にtop,size,pop,beankなどの関数が内蔵されている.
pqの実現方法
//그냥 일반전인 pq
#include <queue>
//새로운 비교연산자 만들고 싶을 때
#include <functional>
//기본적 pq는 큰 수 부터 나옴
priority_queue<ll> pq1;
//작은 수 부터 나오게 하는 방법
priority_queue<ll, vector<ll>, greater<>> pq2;
첫번째는 어떤자료형, 두번쨰는 구현체 즉 pq가 담길 공간, 세번째는 비교함수이다.
struct cmp{
bool operator()(ll x,ll y) {return abs(x-3) > abs(y-3);}
};
priority_queue<ll, vector<ll>, cmp> pq3;
struct D{
int a,b,c;
};
struct cmpD{
bool operator() (D x,D y){
if(x.a<y.a) return true;
return true;
}
};
priority_queue<D,vector<D>greater<cmpD>> pq4;
質問する
11286節
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i, j, n, m,s;
vector<int> a[200001];
struct cmp {
bool operator()(ll a,ll b) {
if (abs(a) == abs(b)) return a > b;
return abs(a) > abs(b);
}
};
int main() {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin >> t;
priority_queue < ll, vector < ll>, cmp> pq;
while (t--) {
ll c;
cin >> c;
if (!c) {
if (pq.empty()) cout << "0" << '\n';
else {
cout << pq.top() << '\n';
pq.pop();
}
}
else {
pq.push(c);
}
}
}
マルチアウトレットアルゴリズム
上記のように、距離を格納するための配列を格納します.出発地以外は無限初期化.
また、接続されているノードごとに最小移動距離のみが選択されます.
時間複雑度O(V+E)logE
質問する
1753最短パス
Reference
この問題について(大学連携アルゴリズムウィンターアカデミー第9回(DQ,Daestra)), 我々は、より多くの情報をここで見つけました https://velog.io/@tonyhan18/대학-연합-알고리즘-윈터-스쿨-9회차DQ-다익스트라テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol