結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0