#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<cstring>
#define DIM 3005
using namespace std;
int tip, n, i, j, nr, nod;
int a[DIM][DIM], s[DIM], t[DIM], viz[DIM], w[DIM], ff[DIM];
vector<int> v[DIM];
int cmp(int x, int y){
if(a[1][x] == a[1][y]){
return x < y;
}
return a[1][x] < a[1][y];
}
void dfs(int curr, int nr){
viz[curr] = 1;
ff[ s[curr] ]++;
if(ff[ s[curr] ] == 1){
nr++;
}
if(a[curr][nod] == nr && s[nod] == 0){
s[nod] = s[curr];
}
for(int i = 0; i < v[curr].size(); i++){
int vecin = v[curr][i];
if(viz[vecin] == 0){
dfs(vecin, nr);
}
}
ff[ s[curr] ]--;
}
void adauga(int x, int y){
v[x].push_back(y);
v[y].push_back(x);
}
int main(){
scanf("%d%d", &tip, &n);
for(i = 1; i <= n; i++){
w[i] = i;
for(j = 1; j <= n; j++){
scanf("%d", &a[i][j]);
}
}
sort(w + 1, w + n + 1, cmp);
s[1] = nr = 1;
for(i = 2; i <= n; i++){
nod = w[i];
for(j = i - 1; j >= 1; j--){
if(a[1][ w[j] ] == a[1][nod] && a[ w[j] ][nod] == 1){
s[nod] = s[ w[j] ];
t[nod] = w[j];
adauga(t[nod], nod);
break;
}
}
if(s[nod] != 0){
continue;
}
for(j = 1; j < i; j++){
if(a[ w[j] ][nod] == 2){
t[nod] = w[j];
adauga(t[nod], nod);
break;
}
}
if(t[nod] == 0){
for(j = i + 1; j <= n; j++){
if(a[nod][ w[j] ] == 2){
swap(w[i], w[j]);
}
}
i--;
continue;
}
memset(viz, 0, sizeof(viz) );
memset(ff, 0, sizeof(ff) );
viz[nod] = 1;
dfs(t[nod], 0);
if(s[nod] == 0){
s[nod] = ++nr;
}
}
for(i = 1; i <= n; i++){
cout<< s[i] <<" ";
}
cout<<"\n";
for(i = 2; i <= n; i++){
cout<< i <<" "<< t[i] <<"\n";
}
}
Compilation message
izlet.cpp: In function 'void dfs(int, int)':
izlet.cpp:26:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < v[curr].size(); i++){
~~^~~~~~~~~~~~~~~~
izlet.cpp: In function 'int main()':
izlet.cpp:39:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &tip, &n);
~~~~~^~~~~~~~~~~~~~~~~~
izlet.cpp:43:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &a[i][j]);
~~~~~^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
916 ms |
36016 KB |
Output is correct |
3 |
Correct |
918 ms |
35900 KB |
Output is correct |
4 |
Correct |
857 ms |
35896 KB |
Output is correct |
5 |
Correct |
902 ms |
35780 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
937 ms |
36188 KB |
Output is correct |
2 |
Correct |
875 ms |
36056 KB |
Output is correct |
3 |
Correct |
1083 ms |
36056 KB |
Output is correct |
4 |
Correct |
1121 ms |
36144 KB |
Output is correct |
5 |
Correct |
845 ms |
35988 KB |
Output is correct |
6 |
Correct |
905 ms |
35852 KB |
Output is correct |
7 |
Correct |
651 ms |
30556 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
916 ms |
36016 KB |
Output is correct |
3 |
Correct |
918 ms |
35900 KB |
Output is correct |
4 |
Correct |
857 ms |
35896 KB |
Output is correct |
5 |
Correct |
902 ms |
35780 KB |
Output is correct |
6 |
Correct |
937 ms |
36188 KB |
Output is correct |
7 |
Correct |
875 ms |
36056 KB |
Output is correct |
8 |
Correct |
1083 ms |
36056 KB |
Output is correct |
9 |
Correct |
1121 ms |
36144 KB |
Output is correct |
10 |
Correct |
845 ms |
35988 KB |
Output is correct |
11 |
Correct |
905 ms |
35852 KB |
Output is correct |
12 |
Correct |
651 ms |
30556 KB |
Output is correct |
13 |
Correct |
1195 ms |
35904 KB |
Output is correct |
14 |
Correct |
1089 ms |
61388 KB |
Output is correct |
15 |
Execution timed out |
2061 ms |
53240 KB |
Time limit exceeded |
16 |
Halted |
0 ms |
0 KB |
- |