NC209820. 核弹剑仙
描述
请问你能根据这次比较结果,告诉牛牛:对于号武器,明确比号武器破坏力大的武器有多少把吗?
输入描述
第一行两个正整数,,,。
接下来行,每行两个正整数,,其中,。
输出描述
输出行,第行的数字表示明确比号武器破坏力大的武器有多少把。
示例1
输入:
6 5 1 3 2 4 3 5 4 5 5 6
输出:
0 0 1 1 4 5
C++14(g++5.4) 解法, 执行用时: 9ms, 内存消耗: 504K, 提交时间: 2020-09-23 21:59:33
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e3+10; ll a,b,n,m,ans,vis[maxn]; vector<ll> v[maxn]; void dfs(int now){ vis[now] = 1; for(int tmp:v[now]){ if(!vis[tmp]) dfs(tmp),ans++; } } int main() { cin>>n>>m; while(m--) { cin>>a>>b; v[b].push_back(a); } for(int i=1;i<=n;i++){ memset(vis,0,sizeof(vis)); ans=0; dfs(i); cout<<ans<<endl; } }
C++11(clang++ 3.9) 解法, 执行用时: 9ms, 内存消耗: 452K, 提交时间: 2020-09-12 14:44:48
#include<bits/stdc++.h> using namespace std; const int N = 1e3+100; int f[N],n,m,ans;vector<int> G[N]; void dfs(int x) { f[x] = 1; for(auto y:G[x]) { if(!f[y]) dfs(y),ans++; } } int main() { cin >> n >> m; for(int i = 1;i <= m;i++) { int a,b;cin >> a >> b; G[b].push_back(a); } for(int i = 1;i <= n;i++) { memset(f,0,sizeof(f)); ans = 0;dfs(i);cout << ans << endl; } return 0; }