605B. Lazy Student(codeforces Round 335)
2 seconds
256 megabytes
standard input
standard output
Student Vladislav came to his programming exam completely unprepared as usual. He got a question about some strange algorithm on a graph — something that will definitely never be useful in real life. He asked a girl sitting next to him to lend him some cheat
papers for this questions and found there the following definition:
The minimum spanning tree T of graph G is
such a tree that it contains all the vertices of the original graph G, and the sum of the weights of its edges is the minimum possible
among all such trees.
Vladislav drew a graph with n vertices and m edges
containing no loops and multiple edges. He found one of its minimum spanning trees and then wrote for each edge its weight and whether it is included in the found tree or not. Unfortunately, the piece of paper where the graph was painted is gone and the teacher
is getting very angry and demands to see the original graph. Help Vladislav come up with a graph so that the information about the minimum spanning tree remains correct.
The first line of the input contains two integers n and m (
) —
the number of vertices and the number of edges in the graph.
Each of the next m lines describes an edge of the graph and consists of two integers aj and bj (1 ≤ aj ≤ 109, bj = {0, 1}).
The first of these numbers is the weight of the edge and the second number is equal to 1 if this edge was included in the minimum spanning
tree found by Vladislav, or 0 if it was not.
It is guaranteed that exactly n - 1 number {bj} are
equal to one and exactly m - n + 1 of them are equal to zero.
If Vladislav has made a mistake and such graph doesn't exist, print - 1.
Otherwise print m lines. On the j-th
line print a pair of vertices (uj, vj) (1 ≤ uj, vj ≤ n, uj ≠ vj),
that should be connected by the j-th edge. The edges are numbered in the same order as in the input. The graph, determined by these
edges, must be connected, contain no loops or multiple edges and its edges with bj = 1 must
define the minimum spanning tree. In case there are multiple possible solutions, print any of them.
4 5
2 1
3 1
4 0
1 1
5 0
2 4
1 4
3 4
3 1
3 2
3 3
1 0
2 1
3 1
-1
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=100000+100;
struct node
{
int x,y,id,v,sign;
}a[maxn];
int cnt[maxn];
bool cmp1(node x1,node y1)
{
if(x1.v==y1.v)
return x1.sign>y1.sign;
return x1.v<y1.v;
}
bool cmp2(node x1,node y1)
{
return x1.id<y1.id;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0; i<m; i++)
{
scanf("%d%d",&a[i].v,&a[i].sign);
a[i].id=i;
}
sort(a,a+m,cmp1);
int flag=1;
if(a[0].sign==0)
{
printf("-1\n");
}
else
{
int now=2;//当前要处理的顶点
int cur=3;//不是最小生成树加入到的顶点
cnt[cur]=1;
for(int i=0; i<m; i++)
{
if(a[i].sign)
{
a[i].x=now;
a[i].y=now-1;
now++;
//cur=1;
}
else
{
if(cur<=now-1)
{
a[i].x=cur;
a[i].y=cnt[cur];
// cout<<cur<<" "<<cnt[cur]<<endl;
if(cnt[cur]>=cur-2)//cur与cur+1的边是给最小生成树的
{
cur++;
cnt[cur]=1;
}
else
{
cnt[cur]++;
}
}
else
{
flag=0;
break;
}
}
}
if(flag)
{
sort(a,a+m,cmp2);
for(int i=0; i<m; i++)
{
printf("%d %d\n",a[i].x,a[i].y);
}
}
else
printf("-1\n");
} }
return 0;
}
605B. Lazy Student(codeforces Round 335)的更多相关文章
- Codeforces Round #335 (Div. 2) D. Lazy Student 构造
D. Lazy Student Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/606/probl ...
- Codeforces Round #335 (Div. 2) D. Lazy Student 贪心+构造
题目链接: http://codeforces.com/contest/606/problem/D D. Lazy Student time limit per test2 secondsmemory ...
- Codeforces Round #335 (Div. 2) D. Lazy Student 贪心
D. Lazy Student Student Vladislav came to his programming exam completely unprepared as usual. He ...
- CodeForces 605B Lazy Student
构造.对边的权值排序,权值一样的话,在MST中的边排到前面,否则权值小的排在前面. 然后边一条一条扫过去,如果是1 ,那么连一个点到集合中,如果是0,集合内的边相连. #include<cstd ...
- Codeforces Round #335 Sorting Railway Cars 动态规划
题目链接: http://www.codeforces.com/contest/606/problem/C 一道dp问题,我们可以考虑什么情况下移动,才能移动最少.很明显,除去需要移动的车,剩下的车, ...
- Codeforces Round #335 (Div. 2) B. Testing Robots 水题
B. Testing Robots Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contest/606 ...
- Codeforces Round #335 (Div. 1) C. Freelancer's Dreams 计算几何
C. Freelancer's Dreams Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contes ...
- Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 动态规划
C. Sorting Railway Cars Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/conte ...
- Codeforces Round #335 (Div. 2) A. Magic Spheres 水题
A. Magic Spheres Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contest/606/ ...
随机推荐
- 题解报告:hdu 1285 确定比赛名次
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 Problem Description 有N个比赛队(1<=N<=500),编号依次 ...
- ACM_最短网络(最小生成树)
Problem Description: Farmer John has been elected mayor of his town! One of his campaign promises wa ...
- html5——动画案例(无缝滚动)
无缝滚动:是两组拼在一起的 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 删除ListView item数据 页面不刷新
最近碰到一个匪夷所思的事情.就是我删除listView中一条item数据 网络请求成功了 但是页面不成功,一番折腾 ,找到问题 ,原来我给item 添加了北京点击事假,又给listView 被禁设置 ...
- 戴尔14G服务器用H740P配置阵列
公司采购了几台dell r740机器.做阵列的方式跟之前ctrl+r有很大改动. 戴尔14G机器已经面世一段时间了,14G的机器使用过后都能发现器性能比上一代机器提升了很多,今天给大家带来戴尔14代服 ...
- 谷歌通过ajax获取本地JSON文件,为什么会提示跨域?
在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 下 ...
- matlab数值数据的表示方法,输出数据以及相关函数
数据类型的分类: 1.整型 无符号整型和带符号整形 带符号整形的最大值是127 >>x=int8(129) 输出结果是x=127 >>x=unit8(129) 输出结果是x=1 ...
- C#文件路径问题
一丶声明的文件路径 @"/Upload\\" + timeStr + @"\\" + fileName; \\ 中第一个\是转义符 \\表示的是一个字符 即'\ ...
- 铁大FaceBook的使用体验副本
铁大FaceBook是一个类似QQ和微信等聊天程序的缩小版网站,并且其针对领域较为狭窄:即只针对校园的学生和导员等人员.但其有值得推广的潜力性和可能性. 对于使用它的体验:第一点我感觉这个网站的界面很 ...
- Enable ssh root login in Solaris
1. Change the file /etc/ssh/sshd_config with PermitRootLogin yes to replace PermitRootLogin no 2. re ...