无聊的题,USACO control company

记录哪些公司控制哪些公司,且当每次我们得知某公司控制了某公司百分之多少的股份,就更新控股信息。如果超过50就递归搜索公司j,每个公司至多只递归一次——这个关键,不然程序无法结束,所以得维护一个is_visit数组判断重复。

题没什么意思,可能是我想多了,一开始总觉得可以用DP,浪费了不少时间。



/*
ID: fairyroad
LANG: C++
TASK: concom
*/
 
#include <algorithm>
#include <cstdio>
using namespace std;
 
bool is_visit[101], con[101];
int a[101][101] = {}, stock[101], m;
 
void dfs(int x)
{
	if (is_visit[x]) return;
	is_visit[x] = true;
	for (int i = m; i; --i)
	{
		stock[i] += a[x][i];
		if (stock[i] > 50)
		{
			con[i] = true;
			dfs(i);
		}
	}
}
 
int main()
{
	int n, u, v, w;
	freopen("concom.in", "r", stdin);
	freopen("concom.out", "w", stdout);
	for (scanf("%d", &n); n; --n)
	{
		scanf("%d%d%d", &u, &v, &w);
		a[u][v] += w;
		if (u > m) m = u;
		if (v > m) m = v;
	}
	for (int i = 1; i <= m; ++i)
	{
		fill_n(stock+1, m, 0);
		fill_n(is_visit+1, m, false);
		fill_n(con+1, m, false);
		dfs(i);
		for (int j = 1; j <= m; ++j)
			if (con[j] && i != j)
				printf("%d %d\n", i, j);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值