• P1983-车站分级


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define pb push_back
     4 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
     5 #define INF 100000003
     6 #define ll long long
     7 inline ll read()
     8 {
     9     ll ans = 0;
    10     char ch = getchar(), last = ' ';
    11     while(!isdigit(ch)) last = ch, ch = getchar();
    12     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
    13     if(last == '-') ans = -ans;
    14     return ans;
    15 }
    16 inline void write(ll x)
    17 {
    18     if(x < 0) x = -x, putchar('-');
    19     if(x >= 10) write(x / 10);
    20     putchar(x % 10 + '0');
    21 }
    22 int n,m;
    23 int a[1003][1003];
    24 int in[1003];
    25 int ans = 1;
    26 vector<int> G[1003];
    27 void toposort()
    28 {
    29     queue<int> q;
    30     _for(j,1,n+1)
    31     {
    32         int sum = 0;
    33         _for(i,1,n+1)
    34         if(a[i][j])
    35             G[i].pb(j),sum ++;
    36         in[j] = sum;
    37     }
    38 
    39     _for(i,1,n+1)
    40         if(!in[i])
    41             q.push(i);
    42     q.push(0);
    43     while(q.size()!=1)
    44     {
    45         int x = q.front();
    46         q.pop();
    47         if(!x)
    48         {
    49             q.push(0);
    50             ans ++;
    51             continue;
    52         }
    53         _for(i,0,G[x].size())
    54         {
    55             in[G[x][i]] --;
    56             if(!in[G[x][i]])
    57                 q.push(G[x][i]);
    58         }
    59     }
    60 }
    61 int main()
    62 {
    63     n = read(), m = read();
    64     _for(i,1,m+1)
    65     {
    66         int t = read();
    67         set<int> s;
    68         int st,ed;
    69         _for(j,1,t+1)
    70         {
    71             int k = read();
    72             if(j==1)
    73                 st = k;
    74             else if(j==t)
    75                 ed = k;
    76             s.insert(k);
    77         }
    78         _for(j,st+1,ed)
    79             if(!s.count(j))
    80                 for(auto p:s)
    81                     a[j][p] = 1;
    82     }
    83     toposort();
    84     write(ans);
    85     return 0;
    86 }
  • 相关阅读:
    HDU 2853 (KM最大匹配)
    HDU 2852 (树状数组+无序第K小)
    HDU 2851 (最短路)
    HDU 2846 (AC自动机+多文本匹配)
    MyBatis使用示例
    Hessian示例:Java和C#通信
    SQL Server2005配置同步复制
    【问】如何应对关系型数据库中列的不断增加
    Prolog学习:数独和八皇后问题
    Prolog学习:基本概念
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11528274.html
Copyright © 2020-2023  润新知