LYDSY 2208

题目大意

暂无

题目解法

暂无

RTFC

#include <cstdio>
#include <cstring>
int n, ans;
int next[2010 * 2010], to[2010 * 2010], head[2010], idx;
char buf[2010];
bool vis[2010];
void addEdge(int f, int t)
{
    idx++;
    next[idx] = head[f];
    head[f] = idx;
    to[idx] = t;
}
void dfs(int x)
{
    ans++;
    vis[x] = true;
    for (int cur = head[x]; cur; cur = next[cur])
        if (!vis[to[cur]])
            dfs(to[cur]);
}
int main()
{
    scanf("%d\n", &n);
    for (int i = 0; i < n; i++)
    {
        fgets(buf, 2010, stdin);
        for (int j = 0; j < n; j++)
            if (buf[j] == '1')
                addEdge(i + 1, j + 1);
    }
    for (int i = 1; i <= n; i++)
    {
        memset(vis, 0, sizeof(vis));
        dfs(i);
    }
    printf("%d", ans);
    return 0;
}