先上题目:

Domestic Networks
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 732   Accepted: 204   Special Judge

Description

Alex is a system administrator of Domestic Networks Inc. His network connects apartments and spans over multiple buildings.

The network expands and Alex has to design a new network segment. He has a map that shows apartments to connect and possible links. Each link connects two apartments and for each possible link its length is known. The goal is to make all apartments connected (possibly through other apartments).

Domestic Networks Inc. buys cable in the nearest cable shop. Unfortunately, shop sells only category 5 and 6 cables at price of p5 and p6 rubles per meter respectively. Moreover, there are only q5 meters of category 5 cable and q6 meters of category 6 cable available in the shop.

Help Alex to solve a hard problem: make a new network construction plan with possible minimal cost. A plan consists of list of links to be made and cable category for each link (each link should be a single piece of cable of either 5 or 6 category). The cost of the plan is the sum of cost of all cables. The total length of cables of each category used in the plan should not exceed the quantity of the cable available in the shop.

Input

The first line of the input file contains two numbers: n — the number of apartments to be connected and m — the number of possible links (1 ≤ n ≤ 1000, 1 ≤ m ≤ 10 000).

Following m lines contain possible link descriptions. Each description consists of three integer numbers: ai and bi — apartments that can be connected by the link and li — link length in meters (0 ≤ li ≤ 100). Apartments are numbered from 1 to n.

The last line of the input file contains four integer numbers: p5q5p6 and q6 — price and quantity of category 5 and 6 cables respectively (1 ≤ piqi ≤ 10 000).

Output

If all apartments can be connected with the available cable, output n lines — an optimal network construction plan. The first line of the plan must contain plan’s cost. Other lines of the plan must consist of two integer numbers each: ai — number of the link to make and ci — the category of the cable to make it of. Links are numbered from 1 to m in the order they are specified in the input file. If there are more than one optimal plans, output any of them.

If there is no plan meeting all requirements, output a single word “Impossible”.

Sample Input

6 7
1 2 7
2 6 5
1 4 8
2 3 5
3 4 5
5 6 6
3 5 3
2 11 3 100

Sample Output

65
1 5
2 6
4 6
5 6
7 5

Source

Northeastern Europe 2007, Northern Subregion
 
  题意:给你一幅图,图上每一条边有长度,给你一定数量的两种电线,告诉你它们的数量以及单价,问你能不能用这些电线花最小的代价令图上每个点互相连通。如果可以就输出最小代价,并输出选了哪些线路,它们分别用了哪种电线,一条线路上只能用一种电线。
  做法是先对这个图求一次MST,如果不存在MST,就输出"Impossbile",否则就有可能存在合法的方案,这里我们可以用背包选电线。我们的目标是让尽量多的电线使用便宜的那一种电线,所以我们对便宜的那种电线进行一次背包,剩下的线路用贵的电线,然后判断一下是否符合输出的电线数量,如果符合就输出所有结果,否者就是非法的。
 
上代码:
 
 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#define MAX 10002
using namespace std; typedef struct edge{
int u,v,l,id; bool operator < (const edge& o)const{
return l<o.l;
}
}edge; edge e[MAX];
int p[MAX],mst[MAX],tot;
int n,m,p5,q5,p6,q6,i5,i6;
int pag[MAX];
bool f[MAX];
set<int> e5,e6; int findset(int u){
return u==p[u] ? p[u] : p[u]=findset(p[u]);
} void MST(){
tot=;
int u,v;
for(int i=;i<m;i++){
u=findset(e[i].u); v=findset(e[i].v);
if(p[u]!=p[v]){
p[v]=u;
mst[tot++]=i;
}
}
} int main()
{
int I5,I6;
//freopen("data.txt","r",stdin);
while(scanf("%d %d",&n,&m)!=EOF){
for(int i=;i<=n;i++) p[i]=i;
for(int i=;i<m;i++){
scanf("%d %d %d",&e[i].u,&e[i].v,&e[i].l);
e[i].id=i+;
}
scanf("%d %d %d %d",&p5,&q5,&p6,&q6);
i5=; i6=;
if(p5>p6){
swap(p5,p6);
swap(q5,q6);
swap(i5,i6);
}
sort(e,e+m);
MST();
if(tot!=n-){
printf("Impossible\n");
continue;
} /*********pag*********/
memset(f,,sizeof(f));
e5.clear(); e6.clear();
//memset(pag,0,sizeof(pag));
f[]=;
for(int i=;i<tot;i++){
int l=e[mst[i]].l;
e6.insert(mst[i]);
for(int j=q5;j>=l;j--){
if(!f[j] && f[j-l]){
f[j]=;
pag[j]=mst[i];
}
}
}
int k=q5;
while(!f[k]) k--;
while(k>){
e5.insert(pag[k]);
e6.erase(pag[k]);
k-=e[pag[k]].l;
}
I5=I6=;
for(set<int>::iterator it = e5.begin();it!=e5.end();it++){
I5+=e[*it].l;
}
for(set<int>::iterator it = e6.begin();it!=e6.end();it++){
I6+=e[*it].l;
}
if(I5<=q5 && I6<=q6){
printf("%d\n",I5*p5+I6*p6);
for(set<int>::iterator it = e5.begin();it!=e5.end();it++){
printf("%d %d\n",e[*it].id,i5);
}
for(set<int>::iterator it = e6.begin();it!=e6.end();it++){
printf("%d %d\n",e[*it].id,i6);
}
}else{
printf("Impossible\n");
}
}
return ;
}

/*3538*/

POJ - 3538 - Domestic Networks的更多相关文章

  1. 100078D Domestic Networks

    传送门 题目大意 有两种染料,给定它们的单价和数量,每染色一米需耗费一个单位的染料,一条边只能用一种燃料,给你一张图,要求你将其中的一些边染色使得在满足图联通的情况下花费最小并输出方案. 分析 首先, ...

  2. POJ 2799 IP Networks

    network address是前(32-n)随意 后n位全零 network mask是前(32-n)全一 后n位全零 本题主要利用位移操作,1ULL表示无符号长整型的常数1,这样写可防止不必要的溢 ...

  3. [poj] 1236 networks of schools

    原题 这是一道强连通分量板子题. 显然subtask1 是要输出入度为0的点的个数 而subtask2,我们考虑一下最优一定是把一个出度为零的点连到入度为零的点上,这样我们要输出的就是max(出度为零 ...

  4. POJ 1236 Networks of School Tarjan 基础

    题目大意: 给一个有向图,一个文件可以从某个点出发传递向他能连的边 现在有两个问题 1.至少需要多少个放文件可以让整个图都有文件 2.可以进行一个操作:给一对点(u,v)连一条u->v的有向边, ...

  5. POJ - 1978 Hanafuda Shuffle

    最初给牌编号时,编号的顺序是从下到上:洗牌时,认牌的顺序是从上到下.注意使用循环是尽量统一“i”的初始化值,都为“0”或者都为“1”,限界条件统一使用“<”或者“<=”. POJ - 19 ...

  6. 迭代加深搜索 POJ 1129 Channel Allocation

    POJ 1129 Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14191   Acc ...

  7. Poj(2784),二进制枚举最小生成树

    题目链接:http://poj.org/problem?id=2784 Buy or Build Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. OpenJudge/Poj 1979 Red and Black / OpenJudge 2816 红与黑

    1.链接地址: http://bailian.openjudge.cn/practice/1979 http://poj.org/problem?id=1979 2.题目: 总时间限制: 1000ms ...

随机推荐

  1. [luogu_U15116]珈百璃堕落的开始

    https://www.zybuluo.com/ysner/note/1239458 题面 给定\(n\)个二元组\((x,y)\),问有多少种方案,使得选出其中几个后,\(\sum x=\sum y ...

  2. android apk 防止反编译技术第三篇-加密

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

  3. Coursera Algorithms week3 快速排序 练习测验: Selection in two sorted arrays(从两个有序数组中寻找第K大元素)

    题目原文 Selection in two sorted arrays. Given two sorted arrays a[] and b[], of sizes n1 and n2, respec ...

  4. 常用进制的转换、进制数的and与or或xor异或运算

    [十进制转换成其他进制]例:将25转换为二进制数 解: 25÷2=12 余数1  12÷2=6   余数0  6÷2=3     余数0  3÷2=1     余数1  1÷2=0     余数1 所 ...

  5. PCB 720全景图嵌入登入界面应用实现

    通常软件主界面或登入界面背景图片通常采用固定图片,这里介绍如何将720度全景图嵌入到登入界面中来, 这里用的素材来源于这里上个月在公司里拍摄的全景图, 一.拍摄720度全景图片, 建议:最好用三角固定 ...

  6. yii2表单,用惯yii1的可以看一下,有很大不同哦

    使用表单 本章节将介绍如何创建一个从用户那搜集数据的表单页.该页将显示一个包含 name 输入框和 email 输入框的表单.当搜集完这两部分信息后,页面将会显示用户输入的信息. 为了实现这个目标,除 ...

  7. codevs3304水果姐逛街(线段数)

    3304 水果姐逛水果街Ⅰ  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond   题目描述 Description 水果姐今天心情不错,来到了水果街. 水果 ...

  8. ACM_无聊者序列(斐波那契数列大数取余(同余)+规律)

    Problem Description: 瓜瓜在玩着由红色和蓝色的大理石做成的玻璃珠,他将n个玻璃珠从左到右排成一个序列叫做无聊者序列.一个非空的红色和蓝色玻璃珠组成的序列是一个无聊者序列.这个序列的 ...

  9. what is success?

    什么是成功?这是个老话题了.然而每个人对成功的认识却也不同.记得央视主持人王志说过成功是相对的,每个人都有自己的成功标准.有的人认为有钱.有房.有车.有女人,就是成功.有的人则认为成功是你做了一件你想 ...

  10. [转]Android的userlogin登录

    本文转自:http://hteqc6o.blog.sohu.com/199334086.html 用户注册 1.首先,先画你想要编译出的界面 根据草图,仅仅使用linearLayout的布局是不够的, ...