关于 Completely Unrelated 80pts #3 #6
  • 板块学术版
  • 楼主Crosser
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/8 12:44
  • 上次更新2024/9/8 16:15:53
查看原帖
关于 Completely Unrelated 80pts #3 #6
467659
Crosser楼主2024/9/8 12:44

我的做法是随便找一个三元环,把它丢到一个集合 SS 里面去。然后枚举 u,v∈Su,v\in S,再枚举 x∈[1,n]x\in [1,n],满足 (u,x),(v,x)∈E(u,x),(v,x)\in E,就把 xx 丢到 SS 里面去。如果所有元素都被丢到 SS 里面去就是固定完了。

我觉得应该没假。

int G[205][205], vis[205], deg[205];
vector<int> V;
int n, m;
bool add() {
    for(int i = 0; i < V.size(); i++) {
        for(int j = 0; j < i; j++) {
            int u = V[i], v = V[j];
            for(int k = 1; k <= n; k++) {
                if(vis[k]) continue;
                if(G[u][k] + G[k][v] == 2) {
                    V.push_back(k);
                    vis[k] = 1;
                    return 1;
                }
            }
        }
    }
    return 0;
}
int fake() { 
    n = read(), m = read();
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            G[i][j] = 0, deg[i] = 0, vis[i] = 0;
    for(int i = 1; i <= m; i++) {
        int u = read(), v = read();
        G[u][v] = G[v][u] = 1;
        deg[u]++;
        deg[v]++;
    }
    if(n == 1) return puts("Yes");
    for(int i = 1; i <= n; i++) if(deg[i] == 0) {
        return puts("No");
    }
    if(n == 2) {
        return puts("Yes");
    }
    int a1 = -1, a2 = -1, a3 = -1;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            for(int k = 1; k <= n; k++) {
                if(G[i][j] + G[j][k] + G[k][i] == 3) {
                    a1 = i;
                    a2 = j;
                    a3 = k;
                    break;
                }
            }
    if(a1 + a2 + a3 == -3) {
        return puts("No");
    }
    V.clear();
    V.push_back(a1);
    V.push_back(a2);
    V.push_back(a3);
    vis[a1] = vis[a2] = vis[a3] = 1;
    int cnt = 3;
    while(add()) cnt++;
    if(cnt < n) return puts("No");
    puts("Yes");
    return 0;
}
2024/9/8 12:44
加载中...