zoukankan      html  css  js  c++  java
  • p1407 [国家集训队]稳定婚姻

    传送门

    分析

    比较套路的题

    我们将原来的男向女连边,后面的女向男连边

    对于每一组看他们是不是在同一个强连通分量理即可

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<ctime>
    #include<queue>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    int n,m,cnt,dfn[300100],low[300100],ist[300100],sum,tot,belong[300100];
    vector<int>v[300100];
    map<string,int>id; 
    string s[10010],t[10010];
    stack<int>a;
    inline void tarjan(int x){
        low[x]=dfn[x]=++tot;
        a.push(x);
        ist[x]=1;
        for(int i=0;i<v[x].size();i++)
          if(!dfn[v[x][i]]){
              tarjan(v[x][i]);
              low[x]=min(low[x],low[v[x][i]]);
          }else if(ist[v[x][i]]){
              low[x]=min(low[x],dfn[v[x][i]]);
          }
        if(low[x]==dfn[x]){
          sum++;
          while(1){
              int u=a.top();
              a.pop();
              ist[u]=0;
              belong[u]=sum;
              if(u==x)break;
          }
        }
    }
    int main(){
        int i,j,k;
        scanf("%d",&n);
        for(i=1;i<=n;i++){
          cin>>s[i]>>t[i];
          if(!id[s[i]])id[s[i]]=++cnt;
          if(!id[t[i]])id[t[i]]=++cnt;
          v[id[s[i]]].push_back(id[t[i]]);
        }
        scanf("%d",&m);
        for(i=1;i<=m;i++){
          string S,T;
          cin>>S>>T;
          v[id[T]].push_back(id[S]);
        }
        for(i=1;i<=cnt;i++)
          if(!dfn[i])tarjan(i);
        for(i=1;i<=n;i++)
          if(belong[id[s[i]]]==belong[id[t[i]]])puts("Unsafe");
            else puts("Safe");
        return 0;
    }
  • 相关阅读:
    iOS RunTime
    js本地对象的操作
    js面向对象实现切换面板
    css3上下翻页效果
    Normalize.css用法
    javasript深度拷贝
    div中div水平垂直居中
    正则表达式匹配括号内网址
    ajax聊天
    移动端px转rem的两种方法
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/10562741.html
Copyright © 2011-2022 走看看