社区讨论

求助宇宙射线

P2024[NOI2001] 食物链参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mlnv6vqe
此快照首次捕获于
2026/02/15 22:52
4 天前
此快照最后确认于
2026/02/15 23:01
4 天前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int fa[50005];
int b[50005];
int c[50005];
int find(int x){
    return x==fa[x]?x:fa[x]=find(fa[x]);
}
int ans,n;
void solve(){
    int op,x,y;
    cin>>op>>x>>y;
    if(x>n||y>n){
        ans++;
        return;
    }
    if(op==1){
        if(find(b[x])==find(y)||find(c[x])==find(y)||find(c[y])==find(x)||find(b[y])==find(x))ans++;
        else{
            fa[find(x)]=find(y);
            if(b[x]&&b[y])fa[find(b[x])]=find(b[y]);
            else b[y]=b[x]=max(b[y],b[x]);
            if(c[x]&&c[y])fa[find(c[x])]=find(c[y]);
            else c[y]=c[x]=max(c[y],c[x]);
        }
        return;
    }
    if(x==y||find(x)==find(y)||find(c[y])==find(x)||find(b[x])==find(y)){
        ans++;
        return;
    }
    if(b[y])fa[find(b[y])]=find(x);
    else b[y]=find(x);
    if(c[x])fa[find(c[x])]=find(y);
    else c[x]=find(y);
    if(b[x]&&c[y])fa[find(b[x])]=find(c[y]);
    else b[x]=c[y]=max(b[x],c[y]);
}
int main(){
    int k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    fa[i]=i;
    while(k--)solve();
    cout<<ans;
    return 0;
}
/*
hack
80 300 
1 38 13
2 9 34
2 62 52
2 64 74
2 80 18
2 31 14
2 23 22
2 41 30
2 60 12
2 80 81
2 18 35
1 53 76
2 9 58
1 9 14
1 28 30
2 49 9
2 65 24
1 30 69
2 79 27
2 32 58
2 59 49
2 26 15
1 65 8
2 11 65
2 65 75
1 67 73
2 19 19
2 50 10
2 25 34
1 68 9
2 54 50
1 13 34
2 78 21
2 40 1
2 55 2
2 38 36
1 81 30
2 45 51
2 1 49
1 46 9
1 21 70
2 71 41
1 21 11
1 49 48
2 46 71
2 45 13
2 79 57
2 58 77
2 66 77
2 44 44
2 69 48
2 21 50
2 30 2
1 30 45
2 53 45
2 26 7
2 23 23
2 24 34
2 47 29
1 43 17
1 25 27
2 19 42
1 77 47
2 64 10
1 15 46
1 58 20
2 19 24
2 56 32
2 75 71
2 11 57
1 11 58
2 67 68
2 49 10
2 7 56
2 4 67
2 66 45
1 63 52
2 4 35
2 63 20
1 14 54
1 72 16
1 39 69
1 50 13
1 13 68
2 58 61
2 66 14
2 15 37
2 70 3
2 55 69
1 79 50
2 25 66
2 34 28
2 63 1
2 3 16
1 76 41
2 41 31
2 8 57
1 5 74
2 10 1
1 30 76
2 46 45
2 10 28
2 40 69
1 17 13
2 61 42
2 32 29
2 42 62
2 75 19
1 68 73
1 56 6
2 7 37
2 79 26
2 9 43
2 30 57
2 33 23
2 43 28
2 25 6
2 14 80
2 76 58
2 19 9
2 57 3
2 56 71
2 23 74
1 20 3
1 55 53
1 58 17
1 21 76
1 11 53
2 55 23
2 25 26
1 27 44
1 65 37
1 54 42
1 66 57
2 36 74
1 49 58
1 47 61
2 35 35
2 49 54
1 81 62
1 76 3
2 41 21
1 11 45
1 33 9
2 48 65
2 50 53
1 4 40
2 41 6
1 7 75
2 4 53
1 49 37
2 60 31
2 58 61
1 34 24
2 52 41
1 13 14
1 26 30
2 19 23
2 73 22
2 6 28
2 37 14
1 26 50
1 43 59
2 57 33
2 23 14
2 28 77
1 6 63
1 80 32
2 58 15
1 9 44
1 3 23
2 71 62
2 74 35
2 3 79
2 53 37
1 17 7
1 76 49
2 53 4
2 23 2
1 26 29
1 44 49
2 37 55
2 42 10
2 57 28
2 74 65
2 58 13
1 61 19
2 35 77
2 54 74
1 62 16
2 3 43
1 21 41
2 45 46
2 9 19
2 65 63
2 53 15
2 40 79
1 6 11
2 75 31
1 53 60
1 37 37
1 31 33
2 61 74
1 24 46
1 41 3
1 14 16
1 30 28
2 23 20
1 22 75
1 28 68
2 14 56
1 50 7
2 59 79
1 33 9
2 14 30
2 77 33
1 63 43
2 32 25
2 15 14
1 44 76
2 23 19
2 62 57
2 35 56
2 79 23
2 37 20
2 7 55
2 49 58
1 4 21
2 2 11
2 29 55
2 49 25
2 55 27
1 10 65
2 28 54
2 65 66
2 13 36
1 19 49
1 77 47
2 74 35
2 16 49
2 43 81
2 41 76
2 46 41
2 19 11
2 63 33
2 15 48
2 79 50
1 11 4
2 31 41
2 60 7
2 37 4
1 33 49
1 74 60
1 46 58
2 3 34
2 16 52
2 28 13
2 20 26
2 75 19
1 68 73
1 56 6
2 7 37
2 79 26
2 9 43
2 30 57
2 33 23
2 43 28
2 25 6
2 14 80
2 76 58
2 19 9
2 57 3
2 56 71
2 23 74
1 20 3
1 55 53
1 58 17
1 21 76
1 11 53
2 55 23
2 25 26
1 27 44
1 65 37
1 54 42
1 66 57
2 36 74
1 49 58
1 47 61
2 35 35
2 49 54
1 81 62
1 76 3
2 41 21
1 11 45
1 33 9
2 48 65
2 50 53
1 4 40
2 41 6
1 7 75
*/
单步调试后发现 2 41 6 让 ans 增加了 152
hack 里面有两个 2 41 6,我说的是前面一个
hack 是 #3

回复

1 条回复,欢迎继续交流。

正在加载回复...