zoj 2500

// ***************************************************************//  zoj 2500   version:  1.0   ·  date: 06/05/2008//  -------------------------------------------------------------//  拓扑求序,变形的弗洛伊德方法//  -------------------------------------------------------------//  Copyright (C) 2008 - All Rights Reserved// ***************************************************************// // ***************************************************************#include <iostream>#include <string>   using namespace std;#define MAXN 100   int mat[100][100];int n,m;   void initial(){ for (int i=0;i<n;i++)  for (int j=0;j<n;j++)   mat[i][j]=0;}   int run(){ cin>>n>>m; initial();    for (int i=0;i<m;i++) {  int aa,bb;  cin>>aa>>bb;  aa--,bb--;  mat[aa][bb]=1;  mat[bb][aa]=-1; }    for (int k=0;k<n;k++) {  for (int i=0;i<n;i++)  {   for (int j=0;j<n;j++)   {    if (mat[i][j]==0 && mat[i][k]==1 && mat[k][j]==1)    {     mat[i][j]=1;     mat[j][i]=-1;    }    if (mat[i][j]==0 && mat[i][k]==-1 && mat[k][j]==-1)    {     mat[i][j]=-1;     mat[j][i]=1;    }   }  } }    int lim=(n-1)/2; int ans=0; for (int i=0;i<n;i++) {  int larger=0;  int smaller=0;  for (int j=0;j<n;j++)  {   if (mat[i][j]==1)    larger++;   if (mat[i][j]==-1)    smaller++;  }  if (larger>lim)   ans++;  if (smaller>lim)   ans++; } return ans;}   int main(){ int re; cin>>re; while (re--)  cout<<run()<<endl; return 0;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值