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

2024-07-15 15:36:48 浏览数 (2)

大家好!我是老码农。

憋屈了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 << "Unsafen";
        } else {
            cout << "Safen";
        }
    }
}

void happy_coder() {

}

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

    // 小码匠
    best_coder();

    // 最优解
    // happy_coder();

    return 0;
}

0 人点赞