可达性统计

可达性统计

[link](AcWing 164. 可达性统计 - AcWing)

题意

给定一张 N N N个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。

题解

每一个点能到的所有的点等价于这个点的直接后继节点能到的点的并集。因为是有向无环图所以拓扑排序以后,当前的拓扑序的某个点u的所有的出边边一定是指向拓扑序后面的点,因此可以倒着遍历这个拓扑序来维护,因为数据范围 1 ≤ N , M ≤ 30000 1\le N, M \le 30000 1N,M30000,最坏的情况下是会成为一条链,每个点都会和后面 x − 1 x-1 x1个点,产生交集,这样就要开一个 n 2 n^2 n2的数组来存, 1 0 6 10^6 106 i n t int int大概需要 4 M B 4MB 4MB,所以会超内存,考虑用二进制来优化,C++自带bitset,可以用bitset这样就可以降低空间复杂度。

Code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <map>
#include <bitset>
#include <unordered_map>
#include <cmath> 
#include <stack>
#include <iomanip>
#include <deque> 
#include <sstream>
#define x first
#define y second
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
bitset<N> f[N];
int q[N];
int d[N];
void topsort() {
    int hh = 0, tt = -1;
    for (int i = 1; i <= n; i ++ ) if (!d[i])  q[++ tt] = i;
    while (hh <= tt) {
        int t = q[hh ++];
        for (int i = h[t]; ~i; i = ne[i]) {
            int j = e[i];
            if (-- d[j] == 0) q[++ tt] = j;            
        }
    }
}
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    memset(h, -1, sizeof h);
    cin >> n >> m;
    while (m --) {
        int a, b;
        cin >> a >> b;
        add(a, b);
        d[b] ++;
    }
    topsort();
    for (int i = n - 1; ~i; i -- ) {
       int j = q[i];
        f[j][j] = 1;
        for (int k = h[j]; ~k; k = ne[k])  
            f[j] |= f[e[k]];
    }
    for (int i = 1; i <= n; i ++ ) cout << f[i].count() << endl;
    return 0;
}
ArcGIS JS 可达性分析是一种基于 ArcGIS JavaScript API 的空间分析工具,用于评估地理区域的可达性和可及性。它可以帮助我们确定特定地点的可达性,并提供衡量地理空间中位置的相对重要性的指标。 通过使用 ArcGIS JS 可达性分析,我们可以进行多种类型的可达性分析,例如计算从一个给定地点到其他地区的最短路径,以及评估交通网络的可行性。该工具可以帮助规划者和决策者更好地理解不同地区的可达性,从而优化基础设施规划和资源分配。 使用 ArcGIS JS 可达性分析,我们可以输入起始点和目标点,并通过选择适当的分析参数来获得所需的结果。这些分析参数包括交通方式、路径约束条件和时间或距离限制等。通过分析结果,我们可以获得到达目标点的最佳路径、到达时间、空间上的热点区域以及其他相关的统计数据。 ArcGIS JS 可达性分析可以在不同的领域中应用,包括城市规划、交通管理、应急响应和商业选址等。在城市规划中,它可以帮助评估不同地区的可达性,从而更好地规划公共交通和道路网络。在商业选址中,它可以分析潜在客户到达商店的便利程度,以优化店铺的位置选择。 总而言之,ArcGIS JS 可达性分析是一种强大的空间分析工具,可以帮助我们评估地理区域的可达性和可及性,并为规划和决策提供有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值