前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【信奥做题日记】初中生太难了!怒刷1道【强连通分量】题目

【信奥做题日记】初中生太难了!怒刷1道【强连通分量】题目

作者头像
小码匠
发布2024-07-15 15:36:48
750
发布2024-07-15 15:36:48
举报
文章被收录于专栏:小码匠和老码农

大家好!我是老码农。

憋屈了1天,终于晚上霸道了一回

昨天小码匠挺憋屈的,1天点灯熬油搞了3道题。

第1题:搞了一上午,没AC,中午收工的时候弄了个30分,草草上午收场。

下午继续搞,接近3点的时候终于AC掉第一题

第2题:继续不顺利,强连通分量+拓扑排序+DP,搞了一下午,结果呢,到吃饭的时候还没搞出来。

晚上7点多一点,终于AC掉第2题。

第3题:我预估得搞到9点半,结果突然跟我说,AC了,我下了,然后人瞬间就跑了,喊都回不来。

初中生太难了

这两天群中群友也在聊暑假出行的事,大家的观点比较一致,到初中后,时间真没有啊。

尤其这些搞竞赛的学子,太难了。

现在出去玩的都是小学生居多,初、高中孩子不是在上补习班的路上,就是在家里刷题。

所以:家中有小朋友的,还是多带孩子们出去玩玩,到初中是真没那么多大块时间。

分享AC代码

为啥总想分享小码匠的代码呢,小码匠写的代码码风自认为还是非常不错的。

如果家中有小码匠,建议孩子们写代码的时候注意规范,养成一个良好的习惯。

有时候我看题解区,有不少孩子喜欢代码压行写,写的又臭又长,这个习惯非常不好。

尤其你以后工作之后,这种习惯,会让团队了人是不能容忍这种风格的。

好啦,就不啰嗦了。

代码语言:javascript
复制

#include <bits/stdc++.h>

using  namespace  std;

const  int maxn = 1e4 + 5;
const  int maxm = 2e5 + 5;
typedef  long  long ll;
int dfn[maxn], low[maxn], color[maxn], t = 1, n, m, c = 0;
bool vis[maxn];

struct edge {
    int from, to, next;
} g[maxm];
struct Couple {
    string u, v;
} couple[maxn];
int head[maxn];
int k = 0;

void add(int u, int v) {
    g[++k].to = v;
    g[k].from = u;
    g[k].next = head[u];
    head[u] = k;
}

stack<int> st;
void tarjan(int x) {
    st.push(x);
    vis[x] = true;
    dfn[x] = t;
    low[x] = t;
    ++t;
    for (int i = head[x]; i; i = g[i].next) {
        int v = g[i].to;
        if (dfn[v] == 0) {
            tarjan(v);
            low[x] = min(low[x], low[v]);
        } else if (vis[v]) {
            low[x] = min(low[x], dfn[v]);
        }
    }
    if (dfn[x] == low[x]) {
        ++c;
        while (!st.empty()) {
            int u = st.top();
            vis[u] = false;
            st.pop();
            color[u] = c;
            if (x == u) {
                break;
            }
        }

    }
}

void best_coder() {
    unordered_map<string, int> name;
    cin >> n;
    int a = 1;
    for (int i = 0; i < n; ++i) {
        cin >> couple[i].u >> couple[i].v;
        name[couple[i].u] = a++;
        name[couple[i].v] = a++;
        add(a - 2, a - 1);
    }
    cin >> m;
    for (int i = 0; i < m; ++i) {
        string u, v;
        cin >> u >> v;
        add(name[v], name[u] );
    }
    for (int i = 1; i <= n * 2; ++i) {
        if (!dfn[i]) {
            tarjan(i);
        }
    }

    for (int i = 0; i < n; ++i) {
        int u = name[couple[i].u];
        int v = name[couple[i].v];
        if (color[u] == color[v]) {
            cout << "Unsafe\n";
        } else {
            cout << "Safe\n";
        }
    }
}

void happy_coder() {

}

int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    // 小码匠
    best_coder();

    // 最优解
    // happy_coder();

    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 憋屈了1天,终于晚上霸道了一回
  • 初中生太难了
  • 分享AC代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档