Ehab and Path-etic MEXs CodeForces - 1325C(思维+贪心)

You are given a tree consisting of n nodes. You want to write some labels on the tree’s edges such that the following conditions hold:

Every label is an integer between 0 and n−2 inclusive.
All the written labels are distinct.
The largest value among MEX(u,v) over all pairs of nodes (u,v) is as small as possible.
Here, MEX(u,v) denotes the smallest non-negative integer that isn’t written on any edge on the unique simple path from node u to node v.

Input
The first line contains the integer n (2≤n≤105) — the number of nodes in the tree.

Each of the next n−1 lines contains two space-separated integers u and v (1≤u,v≤n) that mean there’s an edge between nodes u and v. It’s guaranteed that the given graph is a tree.

Output
Output n−1 integers. The ith of them will be the number written on the ith edge (in the input order).

Examples
Input
3
1 2
1 3
Output
0
1
Input
6
1 2
1 3
2 4
2 5
5 6
Output
0
3
2
4
1
Note
The tree from the second sample:
在这里插入图片描述
思路:挺考验思维的一道题目。我们可以想一下,0和1一定是可以在同一路径上的,因此最小价值一定大于等于2.那么我们就尽可能的去往2上靠。要想是2的话,那么0,1,2肯定不能在同一路径上,这样的话,我们找到一个度大于等于3的点,然后安排上0,1,2,剩下的随便放置,就可以了。对于没有度数大于等于3的点来说,就是一条链,最终结果肯定是n-1了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int maxx=1e5+100;
struct node{
	int x,y;
}p[maxx];
vector<int> v[maxx];
int n;

inline void init()
{
	for(int i=1;i<=n;i++) v[i].clear();
}
int main()
{
	scanf("%d",&n);
	init();
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&p[i].x,&p[i].y);
		v[p[i].x].push_back(p[i].y);
		v[p[i].y].push_back(p[i].x);
	}
	map<pair<int,int>,int> mp;
	mp.clear();
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(v[i].size()>=3)
		{
			for(int j=0;j<3;j++) mp[make_pair(i,v[i][j])]=++cnt;
			break;
		}
	}
	for(int i=1;i<n;i++)
	{
		if(mp[make_pair(p[i].x,p[i].y)]) cout<<mp[make_pair(p[i].x,p[i].y)]-1<<endl;
		else if(mp[make_pair(p[i].y,p[i].x)]) cout<<mp[make_pair(p[i].y,p[i].x)]-1<<endl;
		else cout<<cnt++<<endl;
	}
	return 0;
}

努力加油a啊,(o)/~

发布了588 篇原创文章 · 获赞 31 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览