結果
問題 | No.529 帰省ラッシュ |
ユーザー |
|
提出日時 | 2025-03-30 22:08:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,294 bytes |
コンパイル時間 | 2,498 ms |
コンパイル使用メモリ | 205,672 KB |
実行使用メモリ | 46,148 KB |
最終ジャッジ日時 | 2025-03-30 22:08:26 |
合計ジャッジ時間 | 13,561 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 8 TLE * 1 -- * 9 |
ソースコード
#include<bits/stdc++.h>using namespace std;inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch&15);ch=getchar();}return x*f;}inline void write(int x){if(x<0)x=-x,putchar('-');if(x>9)write(x/10);putchar(x%10+48);return;}const int N=4e5+7;int tim,dfn[N],low[N],bel[N],cnt;vector<int>kd[N],mp[N];priority_queue<int,vector<int>,less<int>>val[N];stack<int>stk;inline void Tarjan(int x,int fa){dfn[x]=low[x]=++tim;stk.emplace(x);for(auto v:mp[x]){if(v==fa)continue;if(!dfn[v]){Tarjan(v,x);low[x]=min(low[x],low[v]);}else low[x]=min(low[x],dfn[v]);}if(low[x]==dfn[x]){int top=stk.top();stk.pop();bel[top]=++cnt;while(top^x){top=stk.top();stk.pop();bel[top]=cnt;}}return;}inline bool found(int x,int fa,int pos){bool fg=0;for(auto g:kd[x]){if(g==fa)continue;if(g==pos)return true;fg|=found(g,x,pos);}return fg;}bool outl=0;inline void dfs(int x,int fa,int pos,int&v,int&p){for(auto g:kd[x]){if(g==pos){int k;if(val[g].empty())k=-1;else k=val[g].top();if(k>v)v=k,p=g;outl=1;return;}if(g==fa)continue;if(!found(g,x,pos))continue;int k;if(val[g].empty())k=-1;else k=val[g].top();if(k>v)v=k,p=g;dfs(g,x,pos,v,p);if(outl)return;}}int main(){int n=read(),m=read(),q=read();for(int i=1;i<=m;++i){int u=read(),v=read();mp[u].emplace_back(v);mp[v].emplace_back(u);}for(int i=1;i<=n;++i)if(!dfn[i])Tarjan(i,-1);for(int i=1;i<=n;++i){for(int j:mp[i])if(bel[i]^bel[j])kd[bel[i]].emplace_back(bel[j]);}while(q--){int op=read();if(op==1){int u=read(),w=read();val[bel[u]].push(w);}if(op==2){int s=read(),t=read();if(bel[s]==bel[t]){if(val[bel[s]].empty()){puts("-1");continue;}int v=val[bel[s]].top();val[bel[s]].pop();write(v),puts("");continue;}else{int v,x;if(val[bel[s]].empty())v=-1;else v=val[bel[s]].top();x=bel[s];outl=0;dfs(bel[s],0,bel[t],v,x);write(v),puts("");if(!val[x].empty())val[x].pop();continue;}}}return 0;}