求调,subtask wa了
查看原帖
求调,subtask wa了
910200
Captainfly楼主2023/9/4 13:40

求调,不知道subtask是什么魔法数据

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define mp make_pair
#define int long long
inline int read()
{
int X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
#define maxn 200010
#define int long long
int idx;
int p,q;
vector<int> vec[maxn*3];
int dfn[maxn],low[maxn];
int cut[maxn];
int n,m;
int flag=0;
int ans=1e9;
bool check(int u,int v)
{
    if(dfn[v]<=dfn[p]&&dfn[v]>dfn[q])
    {
        return 1;
    }
    if(dfn[v]<=dfn[q]&&dfn[v]>dfn[p])
    {
        return 1;
    }
    return 0;

}
inline void tarjan(int now,int root,int fa)
{
    dfn[now]=low[now]=++idx;
    int child=0;
    for(int i=0;i<vec[now].size();i++)
    {
        int to=vec[now][i];
        if(!dfn[to])
        {
            child++;
            tarjan(to,root,now);
            low[now]=min(low[to],low[now]);
            if(low[to]>=dfn[now]&&now!=q&&check(now,to))
            {
                ans=min(ans,now);
            }
        }
        else if(to!=fa) low[now]=min(low[now],dfn[to]);
    }
    if(child>=2&&now==root) cut[now]=1,flag=1;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    while(1){
        int a,b;
        cin>>a>>b;
        if(!a&&!b) break;
        vec[a].push_back(b);
        vec[b].push_back(a);
    }
    int cnt=0;
    // for(int i=1;i<=n;i++){
    //     if(cut[i])
    //     {
    //         cnt++;
    //     }
    // }
    // cout<<cnt<<endl;
    cin>>p>>q;
    tarjan(1,1,-1);
    if(ans==1e9)
    {
        cout<<"No solution"<<endl;
    }
    else
    {
        cout<<ans<<endl;
    }
    return 0;


}
2023/9/4 13:40
加载中...