Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")
- #define int long long
- #define pb push_back
- #define pii pair<signed,signed>
- #define ff first
- #define ss second
- #define max(a,b) a>b?a:b
- using namespace std;
- using namespace __gnu_pbds;
- const int MAXN = 1200000;
- int t, n, m;
- bool tf;
- int cnt, tmp, ans;
- int s1, t1, s2, t2;
- int a, b;
- vector <int> len;
- vector <int> dis;
- vector <signed> deg;
- vector <bool> vis;
- vector <vector<signed>> v;
- cc_hash_table <int,signed> id;
- vector <vector<pii>> path;
- inline char readchar() {
- static const size_t bufsize = 65536;
- static char buf[bufsize];
- static char *p = buf, *end = buf;
- if (p == end) end = buf + fread_unlocked(buf, 1, bufsize, stdin), p = buf;
- return *p++;
- }
- inline void const Read(int & p) {
- p = 0;
- //int tmp = 0;
- char c = readchar();
- //tmp = !(c^'-');
- while (c < '0' || c > '9') {
- c = readchar();
- }
- while (c >= '0' && c <= '9')
- p = (p<<3)+(p<<1)+(c^48), c = readchar();
- //p = tmp?-p:p;
- }
- inline int h(pii a) {
- return a.ff * MAXN + a.ss;
- }
- inline void init() {
- ans = cnt = tf = 0;
- len.clear(), len.resize(n+1);
- id.clear();
- v.clear(), v.resize(n+1);
- }
- inline void init2() {
- path.clear(), path.resize(2*(n+m)+1);
- deg.clear(), deg.resize(2*(n+m)+1);
- dis.clear(), dis.resize(2*(n+m)+1);
- vis.clear(), vis.resize(2*(n+m)+1);
- }
- void DFS(int now) {
- vis[now] = 1;
- for (pii e : path[now]) {
- deg[e.ff]--;
- dis[e.ff] = max(dis[e.ff], dis[now] + e.ss);
- if (!deg[e.ff]) DFS(e.ff);
- }
- }
- signed main() {
- //ios_base::sync_with_stdio(0), cin.tie(0);
- Read(t);
- while (t--) {
- Read(n), Read(m);
- init();
- for (int i = 1; i <= n; i++) {
- Read(len[i]);
- v[i].pb(0);
- id[h(pii(i, 0))] = ++cnt;
- v[i].pb(len[i]);
- id[h(pii(i, len[i]))] = ++cnt;
- }
- init2();
- for (int i = 0; i < m; i++) {
- Read(s1), Read(t1);
- Read(s2), Read(t2);
- a = h(pii(s1, t1));
- b = h(pii(s2, t2));
- if (!id[a]) {
- v[s1].pb(t1);
- id[a] = ++cnt;
- }
- if (!id[b]) {
- v[s2].pb(t2);
- id[b] = ++cnt;
- }
- path[id[a]].pb(pii(id[b], 1));
- deg[id[b]]++;
- }
- for (int i = 1; i <= n; i++) {
- sort(v[i].begin(), v[i].end());
- tmp = 0;
- for (int j : v[i]) {
- if (!j) continue;
- path[id[h(pii(i, tmp))]].pb(pii(id[h(pii(i, j))], j-tmp));
- deg[id[h(pii(i, j))]]++;
- tmp = j;
- }
- }
- for (int i = 0; i < n; i++)
- DFS(i*2+1);
- for (int i = 1; i <= id.size() && !tf; i++) {
- if (deg[i] > 0)
- cout << "LoveLive!\n", tf = 1;
- ans = max(ans, dis[i]);
- }
- if (!tf) cout << ans << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement