欧拉路径45pts求调
  • 板块P1127 词链
  • 楼主AnCangLan
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/19 13:53
  • 上次更新2024/5/19 16:05:45
查看原帖
欧拉路径45pts求调
1216851
AnCangLan楼主2024/5/19 13:53

AC前五个点,后六个点WA

#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <cstring>
using namespace std;

const int N = 1010;

struct edge
{
    int v;
    string w;
};

vector<edge> g[N];
int vis[N]{};
stack<int> st;
string word;
int S = 0x7fffffff, m, d[N][2];

inline static bool cmp(edge a, edge b)
{
    return a.w < b.w;
}

inline static void dfs(int x)
{
    for (int i = vis[x]; i < g[x].size(); i = vis[x])
    {
        vis[x] = i + 1;
        dfs(g[x][i].v);
    }
    st.push(x);
    st.push(-1);
    return;
}

int main()
{
    cin >> m;
    for (int i = 1; i <= m; i++)
    {
        cin >> word;
        int u = word[0], v = word[word.size() - 1];
        g[u].push_back({ v, word });
        S = min({ S, u, v });
        d[v][0]++;
        d[u][1]++;
    }
    int cnt[2] = { 0, 0 };
    bool f = 0;
    for (int i = 'a'; i <= 'z'; i++)
    {
        if (!g[i].empty())
            sort(g[i].begin(), g[i].end(), cmp);
        if (d[i][0] != d[i][1])
        {
            f = 1;
            if (d[i][0] - d[i][1] == 1)
                cnt[0]++;
            else if (d[i][1] - d[i][0] == 1)
            {
                cnt[1]++;
                S = i;
            }
            else
            {
                cout << "***" << endl;
                return 0;
            }
        }
    }
    if (f && (cnt[0] ^ 1 || cnt[1] ^ 1))
    {
        cout << "***" << endl;
        return 0;
    }
    dfs(S);
  	// 判断图联通
    int sum = 0;
    for (int i = 1; i < N; i++)
        sum += vis[i];
    if (sum < m)
    {
        cout << "***" << endl;
        return 0;
    }
    memset(vis, 0, sizeof(vis));
    st.pop();
    while (st.size() > 2)
    {
        int s = st.top();
        if (s != -1)
        {
            cout << g[s][vis[s]].w;
            vis[s]++;
            st.pop();
        }
        else
        {
            cout << ".";
            st.pop();
        }
    }

    return 0;
}
2024/5/19 13:53
加载中...