zoukankan      html  css  js  c++  java
  • HDU 5961:传递(暴搜)

    http://acm.hdu.edu.cn/showproblem.php?pid=5961

    题意:中文题意。给出两个图,判断这个两个图是否都是传递的。注意一下传递的定义要看清,一开始没看清连样例都看不懂。

    思路:点数很少,有了异或那题的暴力之后,这题继续试着爆搜了一下,也能过。主要存两个图,然后dfs的时候传入当前点的上一个点fa,如果 fa 和 下一个点 v 之间没有边相连,那么就不满足条件了。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <cmath>
      4 #include <cstdlib>
      5 #include <algorithm>
      6 #include <string>
      7 #include <iostream>
      8 #include <stack>
      9 #include <map>
     10 #include <queue>
     11 using namespace std;
     12 #define N 2050
     13 #define INF 0x3f3f3f3f
     14 struct node
     15 {
     16     int v, nxt;
     17 }e1[N*N], e2[N*N];
     18 int head1[N], head2[N], tot1, tot2;
     19 int m1[N][N];
     20 int m2[N][N];
     21 bool vis[N], f;
     22 char maze[N][N];
     23 
     24 void add1(int u, int v)
     25 {
     26     e1[tot1].v = v; e1[tot1].nxt = head1[u]; head1[u] = tot1++;
     27 }
     28 
     29 void add2(int u, int v)
     30 {
     31     e2[tot2].v = v; e2[tot2].nxt = head2[u]; head2[u] = tot2++;
     32 }
     33 
     34 void dfs1(int u, int fa)
     35 {
     36     vis[u] = 1;
     37     for(int i = head1[u]; ~i; i = e1[i].nxt) {
     38         int v = e1[i].v;
     39         if(vis[v]) continue;
     40         vis[v] = 1;
     41 //        printf("dfs1 : %d, %d, %d
    ", fa, u, v);
     42         if(!m1[fa][v]) f = 0;
     43         dfs1(v, u);
     44     }
     45 }
     46 
     47 void dfs2(int u, int fa)
     48 {
     49     for(int i = head2[u]; ~i; i = e2[i].nxt) {
     50         int v = e2[i].v;
     51         if(vis[v]) continue;
     52         vis[v] = 1;
     53         if(!m2[fa][v]) f = 0;
     54         dfs2(v, u);
     55     }
     56 }
     57 
     58 int main()
     59 {
     60     int t;
     61     scanf("%d", &t);
     62     while(t--) {
     63         int n;
     64         scanf("%d", &n);
     65         for(int i = 0; i < n; i++) scanf("%s", maze[i]);
     66         memset(m1, 0, sizeof(m1));
     67         memset(m2, 0, sizeof(m2));
     68         memset(head1, -1, sizeof(head1));
     69         memset(head2, -1, sizeof(head2));
     70         tot1 = tot2 = 0;
     71         for(int i = 1; i <= n; i++) {
     72             for(int j = 1; j <= n; j++) {
     73                 if(maze[i-1][j-1] == '-') ;
     74                 else if(maze[i-1][j-1] == 'P') {
     75                     m1[i][j] = 1; add1(i, j);
     76                 } else {
     77                     m2[i][j] = 1; add2(i, j);
     78                 }
     79             }
     80         }
     81         f = 1;
     82         memset(vis, 0, sizeof(vis));
     83         for(int i = 1; i <= n && f; i++) {
     84             if(!vis[i]) {
     85                 vis[i] = 1;
     86                 dfs1(i, i);
     87             }
     88         }
     89         memset(vis, 0, sizeof(vis));
     90         for(int i = 1; i <= n && f; i++) {
     91             if(!vis[i]) {
     92                 vis[i] = 1;
     93                 dfs2(i, i);
     94             }
     95         }
     96         if(f) puts("T");
     97         else puts("N");
     98     }
     99     return 0;
    100 }
    101 
    102 /*
    103 1
    104 4
    105 -P-P
    106 --PQ
    107 P--Q
    108 ----
    109 */
  • 相关阅读:
    selenium python学习笔记---添加等待时间
    转 虫师的selenium借助AutoIt识别上传(下载)详解
    python webdriver API学习笔记
    python-assert
    selenium2.0关于python的常用函数
    pcurl 学习 http文件下载及写入空设备文件实例
    pl/sql sql窗口允许输出和允许变量替换
    Git .gitignore文件忽略
    允许远程访问MySQL的设置
    Map 遍历取值及jstl的取值
  • 原文地址:https://www.cnblogs.com/fightfordream/p/6035061.html
Copyright © 2011-2022 走看看