【USACO2.3.5】控制公司 BFS

来源:互联网 发布:中考英语听力训练软件 编辑:程序博客网 时间:2024/06/11 00:07

把每个公司到每个公司,用邻接表保存。


每次搜索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;}


0 0