首页 > 其他分享 >AtCoder Beginner Contest 285 ——D

AtCoder Beginner Contest 285 ——D

时间:2023-01-16 19:44:16浏览次数:64  
标签:AtCoder typedef Beginner int tt ts long ans 285

题目:D - Change Usernames (atcoder.jp)

题解:在所有的s[i]和t[i]之间连接一条有向边,由s[i]指向t[i],连接完之后可以发现,会形成若干条链或者环,如果出现了环那么一定不可以实现,所以用拓扑排序判断是否出现了环即可

代码:

#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
#define endl '\n'
using namespace std;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pll;
typedef unsigned long long ULL;
const ll mod = 998244353;
const int N = 1e5 + 5;
int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}
int cmp(int a, int b)
{
    return a > b;
}
vector<string> s,t;
map<string,string> e;
map<string,int> in;
queue<string> q;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        string ts,tt;
        cin>>ts>>tt;
        s.push_back(ts);
        t.push_back(tt);
        e[ts]=tt;
        in[ts];
        in[tt]=1;
    }
    int ans=0;
    for(auto x:in)
    {
        if(x.second==0)q.push(x.first),ans++;
    }
    while(q.size())
    {
        auto x=q.front();
        q.pop();
        if(e.find(x)!=e.end())
        {
            in[e[x]]--;
            if(in[e[x]]==0) q.push(e[x]),ans++;
        }
    }
    if(ans==in.size()) cout<<"Yes";
    else cout<<"No";
    return 0;
}

  

标签:AtCoder,typedef,Beginner,int,tt,ts,long,ans,285
From: https://www.cnblogs.com/hhhhy0420/p/17056183.html

相关文章

  • ABC 285 E
    题面在某个世界里,一周有$N$天。有一个工厂,为了最大化工人的产出,决定合理安排工作日和休息日。他们根据统计,发现:对于每个工作日,如果最近的一个休息日距离他有$i$......
  • Atcoder ABC285 赛后总结
    A—EdgeChecker2传送门题目大意给你一棵树,输入两个\(1-15\)的数\(a,b\),求\(a\)是否是\(b\)老爹父亲这颗树如图:题目解法超级无敌暴力法(wu一种最最最简......
  • AtCoder Beginner Contest 285 题解
    比赛链接:https://atcoder.jp/contests/abc285总体来说不算难。A-C略。\(D\)因为起点终点不同,起点之间、终点之间两两不同,所以有环的情况是错的,其他都是对的。写起来的......
  • AtCoder Beginner Contest 285 解题报告
    AtCoderBeginnerContest285解题报告\(\text{DaiRuiChen007}\)ContestLinkA.EdgeChecker2假设\(a\geb\),当且仅当\(\left\lfloor\dfraca2\right\rfloor=b\)......
  • AtCoder Beginner Contest 285 D - Change Usernames(拓扑排序)
    这题想到可以用map容器将string与一个端点下标对应,再建一个有向图,将问题转换成判断一个有向图是否有环赛后补题网上搜如何判断图是否有环,学到了拓扑排序拓扑排序是什么......
  • Atcoder ARC 061 题解
    C-ManyFormulas题意​ 给出一个长度为10的由数字组成的字符串,你可以把'+'插入到任意位置,将字符串分割,形成一个算式。你有很多分割的方案,现在你需要将所有出现的算式的......
  • AtCoder Beginner Contest 285
    A-EdgeChecker2(abc285a)题目大意给定如下一棵树。给定\(a,b(a<b)\),问两者是否有连边。解题思路观察数可发现其为二叉树,两者有连边当且仅当\(b=2a\)或\(b=2a......
  • ABC 285 ABCD
    https://atcoder.jp/contests/abc285/tasksA-EdgeChecker2题目大意:二叉树,给定两个数字,问其中一个是否和另一个数字直接连线?也即是是否是父节点?SampleInput1......
  • Atcoder Regular Contest ARC 153 A B C D 题解
    点我看题A-AABCDDEFE一个beautifulnumber是形如这样的:\(S1S1S3S4S5S5S7S8S7\)。如果选定了\(S1\),后面的数有100000种选法,所以先求出答案的\(S1\)。假设现在我们要求出......
  • Atcoder Regular Contest ARC 153 A B C D 题解
    点我看题A-AABCDDEFE一个beautifulnumber是形如这样的:\(S1S1S3S4S5S5S7S8S7\)。如果选定了\(S1\),后面的数有100000种选法,所以先求出答案的\(S1\)。假设现在我们要求出......