無聊的題,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);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章