• Aizu


     Aizu - 2555 Everlasting Zero

    题意:学习技能,每个技能有不同的要求,问能否学习全部特殊技能

    思路:枚举每两个技能,得到他们的先后学习关系,如果两个都不能先学的话就是No了,如果A>B,B>C,但是并没有A>C那么这种情况也是不允许的了,我过的也是比较惊险。

      1 #pragma comment(linker, "/STACK:1000000000")
      2 #include <bits/stdc++.h>
      3 #define LL long long
      4 #define INF 0x3f3f3f3f
      5 #define IN freopen("in.txt","r",stdin);
      6 #define OUT freopen("out.txt", "w", stdout);
      7 using namespace std;
      8 #define MAXN 105
      9 #define MAXM 25005
     10 
     11 bool dayu[MAXN][MAXN], vis[MAXN][MAXN][MAXN];
     12 int in[MAXN];
     13 queue<int> Q;
     14 int gao[MAXN][MAXN], di[MAXN][MAXN];
     15 int main()
     16 {
     17         //IN;
     18         int m, n, k, x, y;
     19         char s[5];
     20         scanf("%d%d", &m, &n);
     21         memset(di, 0, sizeof(di));
     22         memset(gao, INF, sizeof(gao));
     23         for(int i = 1; i <= m; i++){
     24             scanf("%d", &k);
     25             for(int j = 1; j <= k; j++){
     26                 scanf("%d%s%d", &x, &s, &y);
     27                 if(s[0] == '<'){
     28                     gao[i][x] = min(gao[i][x], y);
     29                 }
     30                 else{
     31                     di[i][x] = max(di[i][x], y);
     32                 }
     33             }
     34         }
     35         for(int i = 1; i <= m; i++){
     36             for(int j = 1; j <= n; j++){
     37                 if(di[i][j] > gao[i][j]){
     38                     printf("No
    ");
     39                     return 0;
     40                 }
     41             }
     42         }
     43         memset(dayu, 0, sizeof(dayu));
     44         memset(in, 0, sizeof(in));
     45         for(int i = 1; i <= m; i++){
     46             for(int j = 1; j <= m; j++){
     47                 if(i == j) continue;
     48                 bool flag = false;
     49                 for(int k = 1; k <= n; k++){
     50                     if(di[i][k] > gao[j][k]){
     51                         flag = true;
     52                         break;
     53                     }
     54                 }
     55                 if(!flag){
     56                     dayu[i][j] = true;
     57                     in[j]++;
     58                 }
     59             }
     60         }
     61         for(int i = 1; i <= m; i++){
     62             for(int j = 1; j <= m; j++){
     63                 for(int k = 1; k <= m; k++){
     64                     if(i == j || i == k || j == k) continue;
     65                     if(dayu[i][j] && dayu[i][k] && dayu[k][j]){
     66                         vis[i][j][k] = true;
     67                         vis[i][k][j] = true;
     68                         vis[j][i][k] = true;
     69                         vis[j][k][i] = true;
     70                         vis[k][i][j] = true;
     71                         vis[k][j][i] = true;
     72                     }
     73                 }
     74             }
     75         }
     76         for(int i = 1; i <= m; i++){
     77             for(int j = 1; j <= m; j++){
     78                 for(int k = 1; k <= m; k++){
     79                     if(i == j || i == k || j == k) continue;
     80                     if(vis[i][j][k]) continue;
     81                     printf("No
    ");
     82                     return 0;
     83                 }
     84             }
     85         }
     86         for(int i = 1; i <= m; i++){
     87             for(int j = 1; j <= m; j++){
     88                     if(i == j) continue;
     89                 if(!dayu[i][j] && !dayu[j][i]){
     90                     printf("No
    ");
     91                     return 0;
     92                 }
     93             }
     94         }
     95         printf("Yes
    ");
     96         return 0;
     97        /* memset(vis, 0, sizeof(vis));
     98         while(!Q.empty()){
     99             Q.pop();
    100         }
    101         for(int i = 1; i <= m; i++){
    102             bool flag = false;
    103             for(int j = 1; j <= m; j++){
    104                 if(dayu[i][j] || i == j) continue;
    105                 flag = true;
    106                 break;
    107             }
    108             if(!flag){
    109                 Q.push(i);
    110                 vis[i] = true;
    111             }
    112         }
    113         int ans = 0;
    114 
    115         while(!Q.empty()){
    116             int s = Q.front();
    117             vis[s] = true;
    118             ans++;
    119             Q.pop();
    120             for(int i = 1; i <= m; i++){
    121                 if(dayu[s][i]){
    122                     in[i]--;
    123                     if(in[i] == 0 && !vis[i]){
    124                         Q.push(i);
    125                     }
    126                 }
    127             }
    128         }
    129         if(ans == m){
    130             printf("Yes
    ");
    131         }
    132         else{
    133             printf("No
    ");
    134         }*/
    135     return 0;
    136 }
  • 相关阅读:
    学习Javascript数据结构与算法(第2版)笔记(3)
    学习Javascript数据结构与算法(第2版)笔记(2)
    学习Javascript数据结构与算法(第2版)笔记(1)
    MSBI表格模型与多维模型比较
    如果存在这个表,则删除这个表的sql
    SQL对Xml字段的操作
    Dynamic CRM 2013学习笔记(六)备份和恢复
    Dynamic CRM 2013学习笔记(五)禁止修改审批通过后的单据
    Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具
    Dynamic CRM 2013学习笔记(三)快速创建实体 EntityCreater
  • 原文地址:https://www.cnblogs.com/macinchang/p/4751394.html
Copyright © 2020-2023  润新知