CSES - HIIT Open 2018 - Results
Submission details
Task:Monotonic
Sender:Wave of Technology
Submission time:2018-05-26 15:31:26 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.02 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.06 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.01 sdetails
#7ACCEPTED0.03 sdetails
#8ACCEPTED0.02 sdetails
#9ACCEPTED0.02 sdetails
#10ACCEPTED0.03 sdetails

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll, ll> PLL;

const ll INF = 1000000000000000LL;

ll n;

template<typename T>
void print_vector(vector<T> & v) {
  for (auto x : v) {
    cout << x << " ";
  }
}

const ll MAXK = 1000;
const ll TRY = 1000;

ll solve() {
  ll n, m;
  cin >> n >> m;

  vector<PLL> pr(m);
  for (int i=0; i<m; i++) {
    cin >> pr[i].first;
    cin >> pr[i].second;
    pr[i].first--;
    pr[i].second--;
  }

  ll maxk = 0;
  for (int ii=0; ii<TRY; ii++) {
    vector<ll> x (n);
    for (int i=0; i<n; i++) {
      x[i] = rand();
    }

    ll k = 0;
    while (k < MAXK) {
      k++;
      for (auto p : pr) {
	if (x[p.first] > x[p.second]) {
	  swap(x[p.first], x[p.second]);
	}
      }

      bool sorted = true;
      for (int i=0; i<n-1; i++) {
	sorted &= (x[i] <= x[i+1]);
      }

      if (sorted) { break; }
      
    }
    maxk = max(k, maxk);
    if (maxk == MAXK) { break; }
  }

  if (maxk == MAXK) { return -1; } else { return maxk; }
}

int main() {

  cin.tie(NULL);
  std::ios::sync_with_stdio(false);

  ll t;
  cin >> t;
  for (int i=0; i<t; i++) {
    cout << solve() << endl;
  }
  
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
3
4 4
1 2
3 4
1 2
...

correct output
-1
3
1

user output
-1
3
1

Test 2

Verdict: ACCEPTED

input
10
15 200
1 14
2 6
3 14
...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 3

Verdict: ACCEPTED

input
10
15 350
1 14
2 6
3 14
...

correct output
3
-1
2
-1
1
...

user output
3
-1
2
-1
1
...

Test 4

Verdict: ACCEPTED

input
10
15 1500
1 14
2 6
3 14
...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 5

Verdict: ACCEPTED

input
10
15 100
4 10
3 9
6 15
...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 6

Verdict: ACCEPTED

input
10
15 200
4 5
2 12
7 8
...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 7

Verdict: ACCEPTED

input
10
15 300
5 10
6 12
12 13
...

correct output
-1
-1
2
2
-1
...

user output
-1
-1
2
2
-1
...

Test 8

Verdict: ACCEPTED

input
10
15 400
10 13
2 14
8 13
...

correct output
-1
1
1
-1
1
...

user output
-1
1
1
-1
1
...

Test 9

Verdict: ACCEPTED

input
10
15 14
14 15
11 12
1 2
...

correct output
8
7
4
4
3
...

user output
8
7
4
4
3
...

Test 10

Verdict: ACCEPTED

input
10
15 14
1 2
2 3
3 4
...

correct output
14
7
5
4
3
...

user output
14
7
5
4
3
...