P8396 [CCC 2022 S2] Good Groups 题解

· · 题解

简单模拟。

首先读入规定,也就是哪些人必须在一起,哪些人不能在一起。

然后读入小组,并将小组内的三个人的组别全部赋值为小组的编号。

最后根据小组编号,累加不符合的规定即可。

注意名字是字符串,做到三个人的组别全部赋值为小组的编号时无法直接用名字做下标,可以用 STL 中的 map。

代码:

#include <bits/stdc++.h>
//#define int long long
using namespace std;
namespace P{
    int t1,t2,t3,i;
    string n1[2][100005],n2[2][100005];
    string a,b,c;
    map <string,int> g;
    void solve(){
        cin>>t1;
        for (i=1;i<=t1;i++)
            cin>>n1[0][i]>>n1[1][i];
        cin>>t2;
        for (i=1;i<=t2;i++)
            cin>>n2[0][i]>>n2[1][i];
        cin>>t3;
        for (i=1;i<=t3;i++){
            cin>>a>>b>>c;
            g[a]=g[b]=g[c]=i;
        }
        int ans=0;
        for (i=1;i<=t1;i++)
            if (g[n1[0][i]]!=g[n1[1][i]])
                ans++;
        for (i=1;i<=t2;i++)
            if (g[n2[0][i]]==g[n2[1][i]])
                ans++;
        cout<<ans;
    }
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    return P::solve(),0;
}