Submission #894936

#TimeUsernameProblemLanguageResultExecution timeMemory
894936alexander707070Jail (JOI22_jail)C++14
61 / 100
5040 ms32464 KiB
#include<bits/stdc++.h>
#define MAXN 200007
using namespace std;

int n,m,q,a,b;
int s[MAXN],t[MAXN];
int start[MAXN],fin[MAXN],vis[MAXN];
bool dali;

vector<int> v[MAXN],g[MAXN];

void reset(){
    for(int i=1;i<=n;i++){
        v[i].clear();
        start[i]=fin[i]=0;
    }
    for(int i=1;i<=m;i++){
        g[i].clear(); vis[i]=0;
    }
    dali=false;
}

bool dfs(int x,int p,int y,int root){
    if(x==y)return true;

    for(int i=0;i<v[x].size();i++){
        if(v[x][i]==p)continue;
        if(dfs(v[x][i],x,y,root)){
            if(start[x]!=0 and start[x]!=root){
                g[start[x]].push_back(root);
            }
            if(fin[x]!=0 and fin[x]!=root){
                g[root].push_back(fin[x]);
            }

            return true;
        }
    }

    return false;
}

bool topsort(int x){
    vis[x]=1;

    for(int i=0;i<g[x].size();i++){
        if(vis[g[x][i]]==0 and !topsort(g[x][i]))return false;
        else if(vis[g[x][i]]==1)return false;
    }

    vis[x]=2;
    return true;
}

void solve(){

    cin>>n;
    for(int i=1;i<=n-1;i++){
        cin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }

    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>s[i]>>t[i];
        start[s[i]]=i;
        fin[t[i]]=i;
    }

    for(int i=1;i<=m;i++){
        dfs(s[i],0,t[i],i);
    }

    for(int i=1;i<=m;i++){
        if(vis[i]==2 or vis[i]==1)continue;
        if(!topsort(i))dali=true;
    }

    if(dali)cout<<"No\n";
    else cout<<"Yes\n";

    reset();
}

int main(){

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>q;
    while(q>0){
        reset();
        solve();
        q--;
    }

    return 0;
}

Compilation message (stderr)

jail.cpp: In function 'bool dfs(int, int, int, int)':
jail.cpp:26:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     for(int i=0;i<v[x].size();i++){
      |                 ~^~~~~~~~~~~~
jail.cpp: In function 'bool topsort(int)':
jail.cpp:46:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |     for(int i=0;i<g[x].size();i++){
      |                 ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...