90ptsWAon#9求助
查看原帖
90ptsWAon#9求助
1074084
asd890123楼主2025/6/27 12:49
#include<bits/stdc++.h>
const int N = 250005;
int fa[N],rudu[N],chudu[N];
std::string a[N][2];
std::unordered_map<std::string,std::vector<int> > mp;
int getroot(int x){return x == fa[x] ? x : fa[x] = getroot(fa[x]);}
int main(){
    std::cin.tie(0)->sync_with_stdio(0);
    int n = 0;
    while (std::cin >> a[++n][0] >> a[n][1]) mp[a[n][0]].push_back(n);
    --n;for (int i = 1;i <= n;i++) fa[i] = i;
    for (int i = 1;i <= n;i++)
        for (int j : mp[a[i][1]])
            ++chudu[i],++rudu[j],fa[getroot(i)] = getroot(j);
    for (int i = 1;i <= n;i++)
        if (getroot(i) != getroot(1)){
            std::cout << "Impossible\n";return 0;
        }
    int a = 0,b = 0,c = 0;
    for (int i = 1;i <= n;i++){
        if (rudu[i] == chudu[i]) ++b;
        else if (rudu[i] == chudu[i] + 1) ++c;
        else if (chudu[i] == rudu[i] + 1) ++a;
    }
    if (b == n || (b == n - 2 && a == 1 && c == 1)) std::cout << "Possible\n";
    else std::cout << "Impossible\n";
    return 0;
}
2025/6/27 12:49
加载中...