結果
| 問題 |
No.1605 Matrix Shape
|
| コンテスト | |
| ユーザー |
pengin_2000
|
| 提出日時 | 2021-07-16 22:21:54 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 43 ms / 2,000 ms |
| コード長 | 1,127 bytes |
| コンパイル時間 | 362 ms |
| コンパイル使用メモリ | 31,360 KB |
| 実行使用メモリ | 5,760 KB |
| 最終ジャッジ日時 | 2024-07-06 09:45:40 |
| 合計ジャッジ時間 | 2,200 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 34 |
ソースコード
#include<stdio.h>
int abs(int n)
{
if (n < 0)
n *= -1;
return n;
}
int par[200005];
int root(int n)
{
if (par[n] != n)
par[n] = root(par[n]);
return par[n];
}
void uni(int x, int y)
{
x = root(x);
y = root(y);
par[x] = y;
return;
}
int main()
{
int n;
scanf("%d", &n);
int i;
int h[200005], w[200005];
for (i = 0; i < n; i++)
scanf("%d %d", &h[i], &w[i]);
int in[200005], out[200005];
for (i = 0; i < 200005; i++)
in[i] = out[i] = 0;
for (i = 0; i < n; i++)
{
in[w[i]]++;
out[h[i]]++;
}
int cnt = 0;
for (i = 0; i < 200005; i++)
{
if (abs(in[i] - out[i]) > 1)
{
printf("0\n");
return 0;
}
}
for (i = 0; i < 200005; i++)
par[i] = i;
for (i = 0; i < n; i++)
uni(h[i], w[i]);
cnt = 0;
for (i = 0; i < 200005; i++)
if (in[i] > 0 && root(i) == i)
cnt++;
if (cnt > 1)
{
printf("0\n");
return 0;
}
cnt = 0;
for (i = 0; i < 200005; i++)
cnt += abs(in[i] - out[i]);
if (cnt > 2)
{
printf("0\n");
return 0;
}
if (cnt == 2)
{
printf("1\n");
return 0;
}
cnt = 0;
for (i = 0; i < 200005; i++)
if (in[i] > 0)
cnt++;
printf("%d\n", cnt);
return 0;
}
pengin_2000