列表

详情


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;
}

上一题