【题意】给定n头牛和m对大小关系,求最坏情况下至少还需要比较几对奶牛的大小(在未确定顺序的奶牛对中随机比较)
【算法】floyd求传递闭包
【题解】可达说明大小已知,则不可达点对数量就是最少比较次数。
使用bitset优化传递闭包,复杂度O(n^3 /32)。
#include#include #include using namespace std;const int maxn=1010;int n,m;bitset b[maxn];void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) if(b[i][k])b[i]|=b[k];}int main(){ scanf("%d%d",&n,&m); int u,v; for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); b[u][v]=1; } floyd(); int ans=0; for(int i=1;i