結果
問題 | No.529 帰省ラッシュ |
ユーザー |
|
提出日時 | 2025-03-30 17:21:17 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,570 bytes |
コンパイル時間 | 2,563 ms |
コンパイル使用メモリ | 207,444 KB |
実行使用メモリ | 814,148 KB |
最終ジャッジ日時 | 2025-03-30 17:21:26 |
合計ジャッジ時間 | 7,946 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 1 |
other | AC * 2 WA * 4 RE * 4 MLE * 1 -- * 7 |
ソースコード
#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=2e5+7;struct edge{int nxt,to;}edge[N];int hd[N],tot;inline void addedge(int u,int v){edge[++tot].to=v;edge[tot].nxt=hd[u];hd[u]=tot;}int tim,dfn[N],low[N],bel[N],cnt;vector<int>kd[N],ld[N],mp[N];bool vis[N];priority_queue<int,vector<int>,less<int>>val[N];inline void Tarjan(int x,int fa){dfn[x]=low[x]=++tim;kd[x].push_back(x);for(int i=hd[x];i;i=edge[i].nxt){int v=edge[i].to;if(v==fa)continue;if(!low[v]){Tarjan(v,x);for(auto s:kd[v])kd[x].emplace_back(s);}low[x]=min(low[x],low[v]);}return;}inline bool found(int x,int pos){bool fg=0;for(auto g:mp[x]){if(g==pos)return true;fg|=found(g,pos);}return fg;}bool outl=0;inline void dfs(int x,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(!found(g,pos))continue;int k;if(val[g].empty())k=-1;else k=val[g].top();if(k>v)v=k,p=g;dfs(g,pos,v,p);if(outl)return;}}int main(){// freopen("visit.in","r",stdin);// freopen("visit.out","w",stdout);int n=read(),m=read(),q=read();for(int i=1;i<=m;++i){int u=read(),v=read();addedge(u,v);addedge(v,u);ld[u].emplace_back(v);ld[v].emplace_back(u);}Tarjan(1,0);for(int i=1;i<=n;++i)if(dfn[i]==low[i]){++cnt;for(auto s:kd[i])bel[s]=cnt;}for(int i=1;i<=n;++i)kd[i].clear();for(int i=1;i<=n;++i)for(auto s:ld[i])if(s^bel[i])kd[bel[i]].emplace_back(bel[s]);for(int i=1;i<=cnt;++i){sort(kd[i].begin(),kd[i].end());kd[i].erase(unique(kd[i].begin(),kd[i].end()),kd[i].end());}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],bel[t],v,x);write(v),puts("");if(!val[x].empty())val[x].pop();continue;}}}return 0;}