제출 #394597

#제출 시각아이디문제언어결과실행 시간메모리
394597AriaHNetwork (BOI15_net)C++11
100 / 100
589 ms66548 KiB
/** vaziat sorati ghermeze **/

#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;

typedef long long                   ll;
typedef long double                 ld;
typedef pair<int,int>               pii;
typedef pair<ll,ll>                 pll;
#define all(x)                      (x).begin(),(x).end()
#define F                           first
#define S                           second
#define Mp                          make_pair
#define SZ(x)			    		(int)x.size()
#define fast_io                     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file_io                     freopen("in.txt" , "r+" , stdin) ; freopen("out.txt" , "w+" , stdout);

const int N = 1e6 + 10;
const ll mod = 1e9 + 7;
const ll mod2 = 998244353;
const ll inf = 8e18;
const int LOG = 22;

ll pw(ll a , ll b, ll M)  { return (!b ? 1 : (b & 1 ? (a * pw(a * a % M, b / 2, M)) % M : pw(a * a % M, b / 2, M))); }

int n, ptr, St[N];

vector < int > leaf, G[N];

void dfs(int v, int P = 0)
{
	St[v] = ++ ptr;
	for(auto u : G[v])
	{
		if(u == P) continue;
		dfs(u, v);
	}
}

bool cmp(int i, int j)
{
	return St[i] < St[j];
}

int main()
{
	scanf("%d", &n);
	for(int i = 1; i < n ;i ++)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		G[a].push_back(b);
		G[b].push_back(a);
	}
	int root = 1;
	for(int i = 1; i <= n; i ++)
	{
		if(SZ(G[i]) > 1) root = i;
		if(SZ(G[i]) == 1) leaf.push_back(i);
	}
	dfs(root);
	/*for(int i = 1; i <= n; i ++)
	{
		printf("%d ", St[i]);
	}
	printf("\n");*/
	/*for(auto x : leaf)
	{
		printf("%d ", x);
	}
	printf("\n");*/
	sort(all(leaf), cmp);
	int cu = SZ(leaf) >> 1;
	printf("%d\n", SZ(leaf) - cu);
	for(int i = 0; i < SZ(leaf) - cu; i ++)
	{
		printf("%d %d\n", leaf[i], leaf[i + cu]);
	}
    return 0;
}

/** test corner cases(n = 1?) watch for overflow or minus indices **/

컴파일 시 표준 에러 (stderr) 메시지

net.cpp: In function 'int main()':
net.cpp:48:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   48 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
net.cpp:52:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   52 |   scanf("%d%d", &a, &b);
      |   ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...