传递闭包 杭电1704

    xiaoxiao2022-06-22  20

    刚学传递闭包,在杭电搜到了一个很裸的数据结构题练习,出现几个ass错误,搞到了半夜,提交时还忘了注释freopen(),不说了,睡觉zzzzzzzz

    #include<iostream>

    #include<cstdio> #include<cstring> using namespace std; const int maxn=500+5; bool a[maxn][maxn]; int m,n; void t_closure(){//传递闭包  for(int i=1;i<=n;i++)//列  for(int j=1;j<=n;j++)//行  if(a[j][i]) for(int k=1;k<=n;k++) a[j][k]=(a[j][k]||a[i][k]);//合取  } int main(){ //freopen("data.in","r",stdin); int T; cin>>T; while(T--){ memset(a,0,sizeof(a)); int win,loser; cin>>n>>m; for(int i=1;i<=m;i++){ scanf("%d%d",&win,&loser); a[win][loser]=true; } t_closure(); int cnt=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(a[i][j]==0&&a[j][i]==0&&i!=j) ++cnt; cout<<cnt/2<<endl; } return 0; } 
    转载请注明原文地址: https://ju.6miu.com/read-1122917.html

    最新回复(0)