zoukankan      html  css  js  c++  java
  • ZOJ 3811 zoj 3811 Untrusted Patrol牡丹江网络赛C题

    去年的比赛题目,今年才搞懂AC了===||

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <cstring>
      4 #include <cctype>
      5 #include <cmath>
      6 #include <algorithm>
      7 #include <vector>
      8 #include <queue>
      9 #include <stack>
     10 using namespace std;
     11 
     12 const int inf = 0x3f;
     13 const int INF = 0x3f3f3f3f;
     14 const int maxn = 100005;
     15 int N, M, K, L;
     16 bool sen[maxn], visit[maxn];
     17 int pass[maxn];
     18 int f[maxn];
     19 vector <int>G[maxn];
     20 queue <int> q;
     21 
     22 int find(int x)
     23 {
     24     return x == f[x] ? x : f[x] = find(f[x]);
     25 }
     26 void Union(int x, int y)
     27 {
     28     int fx = find(x), fy = find(y);
     29 
     30     if (fx == fy)
     31     {
     32         return ;
     33     }
     34 
     35     if (fx > fy)
     36     {
     37         swap(fx, fy);
     38     }
     39 
     40     f[fx] = fy;
     41 }
     42 
     43 bool BFS(int start)
     44 {
     45     while (!q.empty())
     46     {
     47         q.pop();
     48     }
     49 
     50     q.push(start);
     51 
     52     visit[start] = true;
     53 
     54     while (!q.empty())
     55     {
     56         int now, next;
     57         now = q.front();
     58         q.pop();
     59 
     60         for (int i = 0; i < G[now].size(); i++)
     61         {
     62             next = G[now][i];
     63 
     64             //printf("start = %d, next = %d
    ", start, next);
     65             if (visit[next])
     66             {
     67                 continue;
     68             }
     69 
     70             visit[next] = true;
     71             //如果是传感器不会入队列,但是要标记为 访问过
     72             if (sen[next])
     73             {
     74                 continue;
     75             }
     76             q.push(next);
     77         }
     78     }
     79 
     80     return false;
     81 }
     82 
     83 bool slove()
     84 {
     85     if(K == 0) return true;
     86     if(K != L) return false;
     87 
     88     for (int i = 0; i < L - 1; i++)
     89     {
     90         BFS(pass[i]);
     91         if(!visit[pass[i+1]]) return false;
     92     }
     93     BFS(pass[L-1]);
     94 
     95     for(int i = 1; i <= N; i++) //检查所有点是否都被访问了
     96         if(!visit[i])
     97             return false;
     98     return true;
     99 
    100 }
    101 int main()
    102 {
    103     int t;
    104     scanf("%d", &t);
    105 
    106     while (t--)
    107     {
    108         memset(sen, false, sizeof(sen));
    109         memset(visit, false, sizeof(visit));
    110 
    111         int x, y, f = 0;
    112         scanf("%d %d %d", &N, &M, &K);
    113 
    114         for(int i = 1; i <= N; i++)
    115             G[i].clear(); //千万不要忘记清空啊
    116 
    117         for (int i = 0; i < K; i++)
    118         {
    119             scanf("%d", &x);
    120             sen[x] = true;
    121         }
    122 
    123         for (int i = 0; i < M; i++)
    124         {
    125             scanf("%d %d", &x, &y);
    126             G[x].push_back(y);
    127             G[y].push_back(x);
    128         }
    129 
    130         scanf("%d", &L);
    131 
    132         for (int i = 0; i < L; i++)
    133         {
    134             scanf("%d", &pass[i]);
    135         }
    136 
    137 
    138         if (!slove())
    139         {
    140             puts("No");
    141         }
    142         else
    143         {
    144             puts("Yes");
    145         }
    146     }
    147 }
    View Code
  • 相关阅读:
    Alpha冲刺(1/4)
    团队项目用户验收评审
    beta冲刺 第四天
    beta冲刺 第三天
    Beta冲刺 第二天
    Beta冲刺 第一天
    实验十一 团队作业7---团队项目设计完善&编码测试
    Alpha冲刺四
    Alpha冲刺
    《Miracle_House》团队项目系统设计改进
  • 原文地址:https://www.cnblogs.com/tenlee/p/4498793.html
Copyright © 2011-2022 走看看