zoukankan      html  css  js  c++  java
  • Super Phyllis(穷举+搜索)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2723

    题意:给出一些字符串u,v,代表u->v,问有几条边是多余的,也就是说去掉那些边后,u仍能到达v。

    思路:穷举每条边,试着去掉该边,bfs搜索两个点是否仍然可达。

      1 #include<stdio.h>
      2 #include<iostream>
      3 #include<string.h>
      4 #include<map>
      5 #include<queue>
      6 #include<vector>
      7 #include<string>
      8 #include<algorithm>
      9 using namespace std;
     10 char s1[210],s2[210],s[210][210];
     11 map<string,int>f;
     12 vector<int>graph[210];
     13 int Map[210][210],vis[210];
     14 int n;
     15 int cnt;
     16 struct node
     17 {
     18     char s1[210];
     19     char s2[210];
     20 }edge[40010],tmp[40010];
     21 int cmp(const node a, const node b)
     22 {
     23     if(strcmp(a.s1,b.s1) == 0)
     24         return strcmp(a.s2,b.s2)<0;
     25     return strcmp(a.s1,b.s1)<0;
     26 }
     27 bool bfs(int s, int t)
     28 {
     29     queue<int> que;
     30     while(!que.empty())
     31         que.pop();
     32     vis[s] = 1;
     33     que.push(s);
     34     while(!que.empty())
     35     {
     36         int u = que.front();
     37         que.pop();
     38         if(u == t)
     39             return true;
     40         for(int i = 0; i < (int)graph[u].size(); i++)
     41         {
     42             int v = graph[u][i];
     43             if(!vis[v] && Map[u][v])
     44             {
     45                 que.push(v);
     46                 vis[v] = 1;
     47             }
     48         }
     49     }
     50     return false;
     51 }
     52 
     53 int main()
     54 {
     55     int item = 1;
     56     while(cin >> n)
     57     {
     58         if(n == 0) break;
     59         for(int i = 0; i <= 200; i++)
     60             graph[i].clear();
     61         f.clear();
     62         memset(Map,0,sizeof(Map));
     63         cnt = 0;
     64         for(int i = 0; i < n; i++)
     65         {
     66             cin>>s1>>s2;
     67             if(!f[s1])
     68             {
     69                 f[s1] = ++cnt;
     70                 strcpy(s[cnt],s1);
     71             }
     72             if(!f[s2])
     73             {
     74                 f[s2] = ++cnt;
     75                 strcpy(s[cnt],s2);
     76             }
     77             graph[ f[s1] ].push_back( f[s2] );
     78             Map[ f[s1] ][ f[s2] ] = 1;
     79         }
     80 
     81         int res = 0;
     82         for(int i = 1; i <= cnt; i++)
     83         {
     84             for(int j = 0; j < (int)graph[i].size(); j++)
     85             {
     86                 int v = graph[i][j];
     87                 memset(vis,0,sizeof(vis));
     88                 Map[i][v] = 0;
     89                 if(bfs(i,v))
     90                 {
     91                     strcpy(edge[res].s1,s[i]);
     92                     strcpy(edge[res].s2,s[v]);
     93                     res++;
     94                 }
     95                 else Map[i][v] = 1;
     96             }
     97         }
     98         sort(edge,edge+res,cmp);
     99         printf("Case %d: ",item++);
    100         int t = 0;
    101         if(res)
    102             tmp[t++] = edge[0];
    103         for(int i = 1; i < res; i++)
    104         {
    105             if(strcmp(edge[i].s1,edge[i-1].s1) == 0 && strcmp(edge[i].s2,edge[i-1].s2) == 0)
    106                 continue;
    107             else
    108             {
    109                 tmp[t++] = edge[i];
    110             }
    111         }
    112         printf("%d",t);
    113         for(int i = 0; i < t; i++)
    114         {
    115             printf(" %s,%s",tmp[i].s1,tmp[i].s2);
    116         }
    117         printf("
    ");
    118 
    119     }
    120     return 0;
    121 }
    View Code
  • 相关阅读:
    Pandas Dict到DataFrame Series到DataFrame 转换
    MySQL锁和事务
    MySQl创建用户和授权,mysquldump
    MySQL索引
    pymysql模块
    Navicat下载安装
    MySQL多表查询
    学习目录
    MySQL单表查询
    MySQL逻辑查询语句的执行顺序
  • 原文地址:https://www.cnblogs.com/LK1994/p/3454006.html
Copyright © 2011-2022 走看看