Submission #144537

# Submission time Handle Problem Language Result Execution time Memory
144537 2019-08-17T05:39:45 Z arayi Izlet (COI19_izlet) C++17
43 / 100
911 ms 85908 KB
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <algorithm>
#include <math.h>
#include <vector>
#include <cstring>
#include <ctime>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <ctime>
#define fr first
#define sc second
#define MP make_pair
#define PB push_back
#define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define lli long long int
#define y1 arayikhalatyan
using namespace std;

lli gcd(lli a, lli b) {
	if (b == 0)
		return a;
	return gcd(b, a % b);
}
lli cg(lli n) {
	return n ^ (n >> 1);
}
lli SUM(lli a)
{
	return (a * (a + 1) / 2);
}
bool CAN(int x, int y, int n, int m)
{
	if (x >= 0 && y >= 0 && x < n && y < m)
	{
		return true;
	}
	return false;
}
double her(double x1, double y1, double x2, double y2)
{
	return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
string strsum(string a, string b)
{
	int p = 0;
	string c;
	reverse(a.begin(), a.end());
	reverse(b.begin(), b.end());
	if (b.length() < a.length())
	{
		for (int i = b.length(); i < a.length(); i++)
		{
			b += "0";
		}
	}
	else
	{
		for (int i = a.length(); i < b.length(); i++)
		{
			a += "0";
		}
	}

	a += "0", b += "0";
	for (int i = 0; i < a.length(); i++)
	{
		c += (a[i] - '0' + b[i] - '0' + p) % 10 + '0';
		p = (a[i] + b[i] - '0' - '0' + p) / 10;
	}
	if (c[c.length() - 1] == '0') c.erase(c.length() - 1, 1);
	reverse(c.begin(), c.end());
	return c;
}
string strmin(string a, string b)
{
	if (a.length() > b.length()) return b;
	if (b.length() > a.length()) return a;
	for (int i = 0; i < a.length(); i++)
	{
		if (a[i] > b[i]) return b;
		if (b[i] > a[i]) return a;
	}
	return a;
}

char vow[] = { 'a', 'e', 'i', 'o', 'u' };
int dx[] = { 1, -1, 0, 0 };
int dy[] = { 0, 0, 1, -1 };



const int N = 1e6 + 30;
const lli mod = 998244353;

int n, t;
int a[3010][3010], pat[3010], sm, p[3010];
vector <int> g[3010], g1[3010], g2[3010];
int get_parent(int x)
{
	if (p[x] == x) return x;
	return p[x] = get_parent(p[x]);
}
bool col[3010], col2[3010];
int par[3010];
void maq()
{
	for (int i = 0; i < n; i++)
	{
		col2[i] = false;
	}
}
void dfs(int v)
{
	col[v] = true;
	for (auto t : g1[v])
	{
		if (!col[t] && get_parent(v) != get_parent(t))
		{
			p[get_parent(t)] = v;
			g[v].PB(t);
			g[t].PB(v);
			dfs(t);
		}
	}
}
int sk;
void dfs2(int k, int v)
{
	col2[v] = true;
	if (pat[k]) return;
	if (a[sk][v] == a[k][v])
	{
		//cout << a[sk][v] << " " << a[k][v] << endl;
		pat[k] = pat[v];
		for(auto p1 : g2[v])
		{
			pat[p1] = pat[v];
		}
		return;
	}
	for(auto p : g[v])
	{
		if (pat[p] && !col2[p])
		{
			dfs2(k, p);
		}
	}
}
void dfs1(int v)
{
	for (auto p : g[v])
	{
		if (!pat[p])
		{
			//cout << p << " ";
			sk = v;
			dfs2(p, v);
			maq();
			if (!pat[p]) pat[p] = sm++;
			//cout << pat[p] << endl;
			dfs1(p);

		}
	}
}
bool col1[3010];
void dfs3(int v)
{
	col1[v] = true;
	for (auto p : g2[v]) cout << v + 1 << " " << p + 1 << endl;
	for (auto p : g[v])
	{
		if (!col1[p])
		{
			cout << v + 1 << " " << p + 1 << endl;
			dfs3(p);
		}
	}
	//col1[v] = false;
}
int main()
{
	fastio;
	//freopen("c.in", "r", stdin);
	cin >> t >> n;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> a[i][j];
		}
	}
	if (t == 2) {
		pat[0] = 1;
		sm = 2;
		for (int i = 1; i < n; i++)
		{
			if (a[0][i] > a[0][i - 1])
			{
				pat[i] = sm;
				sm++;
			}
			else
			{
				set <int> ss;
				for (int j = i - 1; j >= 0; j--)
				{
					ss.insert(pat[j]);
					if (a[i][j] == a[i][j + 1] && a[i][j] == ss.size())
					{
						//	cout << i << " " << j << " " << a[i][j] << endl;
						pat[i] = pat[j];
						break;
					}
				}
			}
		}
		for (int i = 0; i < n; i++)
		{
			cout << pat[i] << " ";
		}
		cout << endl;
		for (int i = 0; i < n - 1; i++)
		{
			cout << i + 1 << " " << i + 2 << endl;
		}
      	return 0;
	}
	for (int i = 0; i < n; i++) p[i] = i;
	for (int i = 0; i < n; i++)
		for (int j = i + 1; j < n; j++)
			if (a[i][j] == 1)
			{
				p[j] = i;
				g2[i].PB(j);
				g2[j].PB(i);
			}
	pat[0] = 1;
	sm = 2;
	for (int i = 0; i < g1[0].size(); i++) pat[g1[0][i]] = 1;
	for (int i = 0; i < n; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (a[i][j] == 2)
			{
				g1[i].PB(j);
				g1[j].PB(i);
			}
		}
	}
	dfs(0);
	//dfs3(0);
	dfs1(0);
	for (int i = 0; i < n; i++)
	{
		cout << pat[i] << " ";
	}
	cout << endl;
	dfs3(0);
	return 0;
}

Compilation message

izlet.cpp: In function 'std::__cxx11::string strsum(std::__cxx11::string, std::__cxx11::string)':
izlet.cpp:57:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = b.length(); i < a.length(); i++)
                            ~~^~~~~~~~~~~~
izlet.cpp:64:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = a.length(); i < b.length(); i++)
                            ~~^~~~~~~~~~~~
izlet.cpp:71:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < a.length(); i++)
                  ~~^~~~~~~~~~~~
izlet.cpp: In function 'std::__cxx11::string strmin(std::__cxx11::string, std::__cxx11::string)':
izlet.cpp:84:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < a.length(); i++)
                  ~~^~~~~~~~~~~~
izlet.cpp: In function 'int main()':
izlet.cpp:215:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      if (a[i][j] == a[i][j + 1] && a[i][j] == ss.size())
                                    ~~~~~~~~^~~~~~~~~~~~
izlet.cpp:246:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < g1[0].size(); i++) pat[g1[0][i]] = 1;
                  ~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 760 KB Output is correct
2 Correct 855 ms 84076 KB Output is correct
3 Correct 799 ms 84220 KB Output is correct
4 Correct 820 ms 85808 KB Output is correct
5 Correct 811 ms 85908 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 601 ms 36028 KB Output is correct
2 Correct 604 ms 46840 KB Output is correct
3 Correct 911 ms 42840 KB Output is correct
4 Correct 793 ms 42916 KB Output is correct
5 Correct 608 ms 47268 KB Output is correct
6 Correct 700 ms 41660 KB Output is correct
7 Correct 535 ms 40308 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 760 KB Output is correct
2 Correct 855 ms 84076 KB Output is correct
3 Correct 799 ms 84220 KB Output is correct
4 Correct 820 ms 85808 KB Output is correct
5 Correct 811 ms 85908 KB Output is correct
6 Correct 601 ms 36028 KB Output is correct
7 Correct 604 ms 46840 KB Output is correct
8 Correct 911 ms 42840 KB Output is correct
9 Correct 793 ms 42916 KB Output is correct
10 Correct 608 ms 47268 KB Output is correct
11 Correct 700 ms 41660 KB Output is correct
12 Correct 535 ms 40308 KB Output is correct
13 Incorrect 679 ms 42292 KB Integer 0 violates the range [1, 3000]
14 Halted 0 ms 0 KB -