QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#743005 | #7991. 最小环 | _LSA_# | TL | 1263ms | 70280kb | C++14 | 3.4kb | 2024-11-13 17:54:24 | 2024-11-13 17:54:28 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
#define pil pair<int,ll>
#define fi first
#define se second
#define mk make_pair
using namespace std;
ll read(){
ll X = 0 ,r = 1;
char ch = getchar();
while(!isdigit(ch) && ch != '-') ch = getchar();
if(ch == '-') r = -1,ch = getchar();
while(isdigit(ch)) X = X*10+ch-'0',ch = getchar();
return X*r;
}
const int N = 3e5+10;
int n,m,in[N],out[N];
set<pil> G[N],E[N];
vector<pil> inn[N];
bool flag[N],er[N];
ll ans = 1e18,dis[N];
vector<int> v;
bool vis[N];
void dijkstra(int st){
for(int x : v) dis[x] = 1e18,vis[x] = false;
dis[st] = 0;
priority_queue<pair<ll,int>>q;
q.push(mk(0,st));
while(!q.empty()){
auto [w,x] = q.top(); q.pop();
if(vis[x]) continue;
vis[x] = true;
for(auto [v,ww] : E[x]){
if(dis[v] > dis[x]+ww){
dis[v] = dis[x]+ww;
q.push(mk(-dis[v],v));
}
if(v == st) ans = min(ans,dis[x]+ww);
}
}
}
int main(){
n = read(); m = read();
for(int i=1;i<=m;i++){
int u = read(),v = read();
ll w = read();
if(u != v){
inn[v].push_back(mk(u,w));
G[u].insert(mk(v,w));
if(!in[v]) in[v] = u;
else in[v] = -1;
}else ans = min(ans,w);
}
// for(int i=1;i<=n;i++){
// if(!in[i]){
// G[i].clear();
// }else if(!G[i].size()){
// for(auto [x,w] : inn[i]){
// auto it = G[x].lower_bound(mk(i,w));
// G[x].erase(it);
// }
// in[i] = 0;
// }
// }
for(int i=1;i<=n;i++)
if(!in[i] || G[i].size() == 0) er[i] = 1;
for(int i=1;i<=n;i++){
if(er[i]) continue;
for(auto [x,w] : G[i])
if(!er[x]) E[i].insert(mk(x,w));
G[i] = E[i]; E[i].clear();
}
queue<int> q;
for(int i=1;i<=n;i++)
if(in[i] > 0 && G[i].size() == 1u && in[i] != i) q.push(i);
while(!q.empty()){
int i = q.front(); q.pop();
if(!in[i] || G[i].size() == 0u || in[i] == i || in[i] == -1) continue;
// cout << i << "\n";
auto [v,w2] = *G[i].begin();
auto it = G[in[i]].lower_bound(mk(i,0));
auto [u,w1] = *it;
u = in[i];
// cout << u << " " << v << " " << w1+w2 << "\n";
G[u].erase(it);
G[u].insert(mk(v,w1+w2));
if(!in[v] || in[v] == i) in[v] = u;
else in[v] = -1;
G[i].clear(); in[i] = 0;
if(in[u] > 0 && G[u].size() == 1u && in[u] != u) q.push(u);
if(in[v] > 0 && G[v].size() == 1u && in[v] != v) q.push(v);
}
for(int i=1;i<=n;i++)
if(in[i] != 0 && G[i].size()) flag[i] = true;
for(int i=1;i<=n;i++)
if(flag[i]) for(auto [v,w] : G[i])
if(flag[v]){
if(i != v) E[i].insert(mk(v,w));
else ans = min(ans,w);
}
// for(int i=1;i<=n;i++){
// if(!flag[i]) continue;
// for(auto [u,w] : E[i]) cout <<i << " " << u << " " << w << "\n";
// }
for(int i=1;i<=n;i++){
if(!flag[i]) continue;
v.push_back(i);
}
for(int x : v) dijkstra(x);
if(ans == 1e18) cout << "-1";
else cout << ans;
return 0;
}
/*
6 6
1 2 1
2 3 1
3 4 1
4 1 1
4 6 1
5 3 1
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 7ms
memory: 42508kb
input:
4 6 1 2 1 4 3 3 4 1 9 2 4 1 3 1 2 3 2 6
output:
7
result:
ok single line: '7'
Test #2:
score: 0
Accepted
time: 9ms
memory: 42504kb
input:
1 0
output:
-1
result:
ok single line: '-1'
Test #3:
score: 0
Accepted
time: 0ms
memory: 42432kb
input:
1 1 1 1 1
output:
1
result:
ok single line: '1'
Test #4:
score: 0
Accepted
time: 130ms
memory: 68564kb
input:
258420 258419 33061 33062 767169384 212916 212917 1741339 229881 229882 896760805 173467 173468 273055172 233189 233190 800433307 10157 10158 126766550 174605 174606 552176083 224030 224031 886617880 229102 229103 783848581 67588 67589 510826095 233648 233649 879695751 214453 214454 867104578 153140...
output:
-1
result:
ok single line: '-1'
Test #5:
score: 0
Accepted
time: 146ms
memory: 65444kb
input:
248016 248896 82688 82755 592665252 202847 203260 294408121 26821 28237 269132335 150967 152178 3125829 246069 247390 29492546 7470 7673 55843492 33975 35414 442802995 28451 28948 193736988 34484 34637 84441058 60168 60309 501991354 79579 79844 26854803 239672 239706 111702667 73548 73658 149840530 ...
output:
98674714245
result:
ok single line: '98674714245'
Test #6:
score: 0
Accepted
time: 153ms
memory: 70280kb
input:
270530 271285 80489 81855 218173724 188930 190845 783975756 29830 30626 22189315 234320 234472 70840355 198096 198272 300313423 224194 226906 105128197 115010 115834 37228105 134788 135583 18647938 257292 257358 98569041 146988 147215 69398857 248752 250002 409565478 62128 63751 839744551 121918 122...
output:
133486910467
result:
ok single line: '133486910467'
Test #7:
score: 0
Accepted
time: 181ms
memory: 62892kb
input:
222087 223141 123107 123811 2984035 216346 217464 675263 139741 141286 892140 77973 78018 453931100 38603 39546 157182459 13105 14616 775862 97035 97704 379136464 86254 88311 84193802 83968 84398 246202498 152486 160164 65619516 73213 73517 1129576 15618 16541 498613468 192241 195576 889879 21363 21...
output:
47599478278
result:
ok single line: '47599478278'
Test #8:
score: 0
Accepted
time: 185ms
memory: 62220kb
input:
212718 214066 104602 105717 148385760 163427 165307 437059346 108663 111803 784753745 15490 15784 789609 77598 80118 53908869 97776 98040 78287597 26994 27717 989577 134781 134919 531908 22362 24185 185680 114422 114890 609661 192852 192861 155477 45695 45800 35773 150695 152662 511678590 101629 102...
output:
36329947627
result:
ok single line: '36329947627'
Test #9:
score: 0
Accepted
time: 161ms
memory: 57564kb
input:
166349 167207 127268 127447 264589535 87716 91194 596943 123233 126065 170996332 16886 20295 35862710 4657 7035 31814455 95412 96577 195164337 17282 19855 200600035 18848 20733 547079078 139859 141952 197062 124361 126887 37905401 30749 32439 248082130 115409 121655 13113841 85640 88061 989595 74722...
output:
30821798636
result:
ok single line: '30821798636'
Test #10:
score: 0
Accepted
time: 236ms
memory: 69796kb
input:
289406 290248 136815 139417 24401 82238 82679 391891 117261 117722 23784755 45898 47276 91613 19042 20538 139326255 90781 91014 33771 173238 174945 166532570 64778 65593 89778641 107363 112432 3864090 260499 261031 165160 167079 167190 807727902 15135 17610 819060894 46707 48909 252893 51782 55878 3...
output:
61125659219
result:
ok single line: '61125659219'
Test #11:
score: 0
Accepted
time: 1263ms
memory: 66172kb
input:
246266 246265 67999 29611 208851615 22833 19844 11567655 78556 60887 111689338 95799 91984 129780604 41384 117633 410486433 7780 17854 417509938 16799 26207 657779642 94022 203027 902990247 41361 49284 914930989 188504 211149 506036119 55526 231127 316210314 179380 117042 590986492 198142 119962 623...
output:
-1
result:
ok single line: '-1'
Test #12:
score: -100
Time Limit Exceeded
input:
211768 213001 149297 26223 476199539 41008 36464 884082193 55217 33464 115782442 68840 35424 855362664 143738 85588 100080439 40110 28162 373005241 129902 66381 475925374 201288 125187 14707055 137096 124072 115900270 133421 107543 256018220 6224 2375 672655723 35440 9684 72896288 59199 35246 339260...