zoukankan      html  css  js  c++  java
  • 【CH2101】可达性统计

    这道题算是搜索和状压的结合吧,作为状压的入门题还是不错的,能让人初步了解状压的含义及应用。

    对这张图进行一遍拓扑排序,然后状压统计(我用了bitset)。

    注意读入,因为我的读入优化挂掉了……

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <queue>
     4 #include <bitset>
     5 using namespace std;
     6 int n,m;
     7 struct edge {
     8     int next,to;
     9 }a[30010<<1];
    10 int num,head[30010<<1],b[30010<<1],tot,in[30010];
    11 bitset<30010> f[30010];
    12 queue<int> q;
    13 inline void add(int from,int to) {
    14     a[++num].next=head[from];
    15     a[num].to=to;
    16     head[from]=num;
    17     in[to]++;
    18 }
    19 int main() {
    20     cin>>n>>m;
    21     for(int i=1;i<=m;i++) {
    22         int x,y;
    23         cin>>x>>y;
    24         add(x,y);
    25     }
    26     for(int i=1;i<=n;i++) if(!in[i]) q.push(i);
    27     while(!q.empty()) {
    28         int now=q.front();
    29         q.pop();
    30         b[++tot]=now;
    31         for(int i=head[now];i;i=a[i].next) {
    32             int v=a[i].to;
    33             in[v]--;
    34             if(!in[v]) q.push(v);
    35         }
    36     }
    37     for(int i=tot;i;i--) {
    38         int now=b[i];
    39         f[now][now]=1;
    40         for(int j=head[now];j;j=a[j].next) f[now]|=f[a[j].to];
    41     }
    42     for(int i=1;i<=n;i++) printf("%d
    ",f[i].count());
    43     return 0;
    44 }
    AC Code
  • 相关阅读:
    freeCAD定制界面
    freeCAD预选项编辑器
    freeCAD文档结构
    FreeCAD鼠标操作指南
    freeCAD下载与安装
    freeCAD特性列表
    关于freeCAD
    html 试题试卷(包含latex)下载成word
    latex转word公式 java (latextoword,latex_word,latex2word,latex_omml)
    oracle 行列转换
  • 原文地址:https://www.cnblogs.com/shl-blog/p/10582042.html
Copyright © 2011-2022 走看看