1 条题解
-
0
思路
正反图可达节点分别为较轻和较重数,超过n/2者不可能居中,不能只计直接比较。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int countReach(int start,const vector<vector<int>>&g){vector<int>seen(g.size());vector<int>s={start};seen[start]=1;int ans=0;while(!s.empty()){int v=s.back();s.pop_back();for(int u:g[v])if(!seen[u]){seen[u]=1;ans++;s.push_back(u);}}return ans;}int main(){int n,m;cin>>n>>m;vector<vector<int>>g(n),r(n);while(m--){int x,y;cin>>x>>y;g[--x].push_back(--y);r[y].push_back(x);}int ans=0;for(int i=0;i<n;i++)if(countReach(i,g)>n/2||countReach(i,r)>n/2)ans++;cout<<ans<<'\n';}
- 1