天天看點

Codeforces Round #738 (Div. 2) C. Mocha and Hiking

​​傳送門​​

Codeforces Round #738 (Div. 2) C. Mocha and Hiking

題意:

給你一個有向圖,問你是否存在經過所有點一次且僅一次的路徑。

思路:

對于一般情況,我們隻需要考慮是否存在

這樣的路徑,存在,則有解。除此之外,還有兩種特殊情況,即當

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<math.h>
using namespace std;
#define ll long long
#define mod 998244353ll
int a[10010];
int in[10010];


int main()
{
  int t;
  cin>>t;
  while(t--)
  {
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++)
    {
      cin>>a[i];
    }
    int minn = 0, flag = 0;
    for(int i = 1; i <= n; i++)
    {
      if(i == n && !a[i])
      {
        flag = 1;
      }
      if(i == 1 && a[i])
      {
        flag = 2;
        break;
      }
      if(!a[i])
      {
        if(a[i+1])
        {
          minn = i;
          break;
        }
      }
    }
    if(minn)
    {
      for(int i = 1; i <= minn; i++)cout<<i<<" ";
      cout<<n+1<<" ";
      for(int i = minn+1; i <= n; i++)cout<<i<<" ";
      cout<<endl;
    }
    else if(flag == 1)
    {
      for(int i = 1; i <= n+1; i++)cout<<i<<" ";
      cout<<endl;
    }
    else if(flag == 2)
    {
      cout<<n+1<<" ";
      for(int i = 1; i <= n; i++)
      cout<<i<<" ";
      cout<<endl;
    }
    else
    {
      cout<<-1<<endl;
    }
  }
}