1 条题解

  • 0
    @ 2025-8-24 22:29:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar zzx0102
    原 sto_5k_orz || AFO on 2023.10.21

    搬运于2025-08-24 22:29:13,当前版本为作者最后更新于2023-05-03 21:45:44,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    显然,如果没有人和巫师 11 决斗,则只有 11 可能有。

    否则,考虑 dfs。

    反向建边,先处理出所有击败的关系。

    然后从 11 开始 dfs,如果 uu 可以干掉 11,那么显然 uu 就有机会拿到。那么同理,所有可以干掉 uu 的巫师 vv 也可以拿到,dfs 下去。

    注意特判。

    #include<bits/stdc++.h>
    using namespace std;
    #define pb push_back
    const int N = 100010; vector<int> e[N]; int n, m, a, ans, b; bool can[N];
    void dfs(int u) {for(int v: e[u]) if(!can[v]) can[v] = 1, dfs(v);}
    int main() {
    	cin >> n >> m; for(int i = 0; i < m; i++) {cin >> a >> b; e[b].pb(a);}
    	if(e[1].empty()) can[1] = 1; // 特判
    	dfs(1); for(int i = 1; i <= n; i++) cout << can[i];
    	return 0;
    }
    
    • 1

    信息

    ID
    6433
    时间
    1000ms
    内存
    64MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者