#include <bitset>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 1010
using namespace std;
int n,m,cnt,cnt2;
int head[N];
int v[N];
bitset<N>b[N];
struct node
{
int from,to,next;
}edge[N*10];
void init()
{
memset(head,-1,sizeof(head));
cnt=1;
}
void edgeadd(int from,int to)
{
edge[cnt].from=from;
edge[cnt].to=to;
edge[cnt].next=head[from];
head[from]=cnt++;
}
int ret;
void dfs(int x)
{
v[x]=1;
for(int i=head[x];i!=-1;i=edge[i].next)
{
int to=edge[i].to;
if(!v[to])
dfs(to);
b[x]|=b[to];
}
}
int ans;
int main()
{
scanf("%d%d",&n,&m);
init();
for(int i=1;i<=n;i++)b[i][i]=1;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
edgeadd(x,y);
}
for(int i=1;i<=n;i++)
{
if(!v[i])dfs(i);
}
for(int i=1;i<=n;i++)
{
ans+=b[i].count();
}
printf("%d\n",n*(n-1)/2-ans+n);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
BZOJ 1703 [Usaco2007 Mar]Ranking the Cows 奶牛排名 bitset优化
原文地址:http://blog.csdn.net/wzq_qwq/article/details/47760811