zoukankan      html  css  js  c++  java
  • 【POI 每日题解 #4】 [POI2008]MAF-Mafia

    [POI2008]MAF-Mafia

    很容易看出是拓扑 但不容易想出来怎么做【可能是我太菜

    首先 入度为零的人是肯定死不了的

    接着 我们分成环和链分析

    对于一个链 

    最多的情况就是顺着一个个开枪 最后剩一个( (n - 1) -> (n), (n - 2) ->(n - 1) …… )

    最少的情况就是死一半(1->2, 3->4……)

    对于一个环

    它和链基本上一样

    区别在于从任何一个人开始都不会影响结果

    这个性质很有用

    因为当有环接在链上时

    最多的情况下环上的点会全部挂掉

     1 void bfs(){
     2     for(int i = 1; i <= n; i++)
     3         if(!ind[i]){
     4             q[++ans1] = i;
     5             ans2++;    
     6         }
     7     for(int i = 1; i <= ans1; i++){
     8         int fro = aim[q[i]];
     9         if(vis[fro]) continue;
    10         ind[aim[fro]]--;
    11         vis[fro] = 1; 
    12         otd[aim[fro]] = 1;
    13         if(!ind[aim[fro]]) q[++ans1] = aim[fro];
    14     }//删链过程 非常重要!
    15     for(int i = 1; i <= n; i++)
    16         if(!vis[i] && ind[i]){
    17             int len = 0, flag = 0;
    18             for(int j = i; !vis[j]; j = aim[j]){
    19                 vis[j] = 1;
    20                 len++;
    21                 flag |= otd[j];
    22             }
    23             //printf("%d %d
    ", flag, len);
    24             ans1 += (len >> 1);
    25             if(len > 1 && !flag) ans2++;
    26         }
    27 }
    关键部分
  • 相关阅读:
    利用JavaScriptCore实现以下简单的功能(平方和)
    UIScrollView 实现比例缩放
    iOS 本地加载js文件
    UIScrollView现实自动循环滚动
    UIScrollView现实循环滚动
    swift
    swift
    swift
    swift
    swift
  • 原文地址:https://www.cnblogs.com/hjmmm/p/9194660.html
Copyright © 2011-2022 走看看