您的位置:首页 > 其它

【USACO2.3.5】控制公司 BFS

2015-02-17 02:33 387 查看
把每个公司到每个公司,用邻接表保存。

每次搜索A公司控制了哪些公司,就把A塞进队列,把和A有链接的公司的控制率加起来,超过50的,就加进队列。 最后把所有曾经进过队列的公司输出来即可。

#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
using namespace std;

int n;

struct edge
{
edge *next;
int v, w;
edge()
{
next = NULL;
}
edge(int V, int W, edge *P)
{
v = V;
w = W;
next = P;
}

}*a[105]={NULL};

inline void insert(int x, int y, int w)
{
a[x] = new edge(y, w, a[x]);
}

int s[105], output[105];
bool vis[105];
queue<int>q;
int main()
{
ios::sync_with_stdio(false);
cin >> n;
while (n --)
{
int a, b, c;
cin >> a >> b >> c;
insert(a, b, c);
}
for (int i = 1; i <= 100; ++ i)
{
memset(s, 0, sizeof(s));
memset(vis, 0, sizeof(vis));
q.push(i);
vis[i] = 1;
while (!q.empty())
{
int now = q.front();
q.pop();
for (edge *j = a[now]; j != NULL; j = j -> next)
{
int will = j -> v;
s[will] += j -> w;
if (s[will] > 50)
{
if (!vis[will])
{
vis[will] = 1;
q.push(will);
}
}
}
}
int tail = 0;
for (int j = 1; j <= 100; ++ j)
if (vis[j] && j != i) cout<<i<<" "<<j<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: