1. 繁忙的都市

【问题描述】

城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:
1.改造的那些道路能够把所有的交叉路口直接或间接的连通起来。
2.在满足要求1的情况下,改造的道路尽量少。
3.在满足要求1、2的情况下,改造的那些道路中分值最大的道路分值尽量小。
任务:作为市规划局的你,应当作出最佳的决策,选择那些道路应当被修建。

【输入格式】

第一行有两个整数n,m表示城市有n个交叉路口,m条道路。
接下来m行是对每条道路的描述,u, v, c表示交叉路口u和v之间有道路相连,分值为c。(1≤n≤300,1≤c≤10000,1≤m≤50000)。

【输出格式】

两个整数s, max,表示你选出了几条道路,分值最大的那条道路的分值是多少。

【样例输入】

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

【样例输出】

3 6

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = ;
int n, m;
int x[maxn], y[maxn], f[maxn];
int ans = ; struct node {
int x, y;
int val;
}dis[]; bool cmp(node a, node b) {
return a.val < b.val;
} int find(int x) {
int r = x;
while(r != f[r]) r = f[r];
int i = x, j;
while(f[i] != r) {
j = f[i];
f[i] = r;
i = j;
}
return r;
} void merge(int x, int y) {
x = find(x);
y = find(y);
if(x != y) f[y] = x;
} int main() {
cin >> n >> m;
for(int i = ; i <= m; i++) {
cin >> dis[i].x >> dis[i].y >> dis[i].val;
}
for(int i = ; i <= n; i++) f[i] = i;
sort(dis + , dis + m + , cmp);
int tmp = , maxn = ;
for(int i = ; i <= m; i++) {
if(find(dis[i].x) != find(dis[i].y)) {
merge(dis[i].x, dis[i].y);
tmp++;
maxn = max(maxn, dis[i].val);
}
if(tmp == n - ) break;
}
cout << tmp << ' ' << maxn;
return ;
} /*
5 5
1 2 3
1 4 5
2 5 7
2 3 6
3 5 10 2 1
1 2 100 100 5
1 10 3
10 32 5
21 50 7
40 80 6
50 99 10 */

2.最优布线问题

【问题描述】

学校有n台计算机,为了方便数据传输,现在要将它们用数据线连接起来。两台计算机被连接是指它们有数据连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往不同的。
  当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。
  现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。

【输入格式】

第一行为整数n(2≤n≤100),表示计算机的数目。此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。

【输出格式】

一个整数,表示最小的连接费用。

【样例输入】

3
      0 1 2
      1 0 1
      2 1 0

【样例输出】

2

#include<iostream>
#include<cstring>
using namespace std;
int g[][];
int minn[];
bool u[];
int n,i,j;
int main()
{
cin >> n;
for(i = ; i <= n; i++){
for(j = ; j <= n; j++){
cin >> g[i][j];
}
}
memset(minn,0x7f,sizeof(minn));
minn[] = ;
memset(u,,sizeof(u));
for(i = ; i <= n; i++){
int k = ;
for(j = ; j <= n; j++){
if(u[j] && minn[j] < minn[k]){
k = j;
}
}
u[k] = false;
for(j = ; j <= n; j++){
if(u[j] && g[k][j] < minn[j]){
minn[j] = g[k][j];
}
}
}
int total = ;
for(i = ; i <= n; i++){
total += minn[i];
}
cout << total << endl;
return ;
}
/*
3
0 1 2
1 0 1
2 1 0 2
0 1 2
1 0 1 4
0 1 2 1
1 0 3 2
2 1 1 3
3 0 3 1 5
0 1 2 1 3
1 0 3 2 1
2 1 1 3 2
3 0 3 1 2
4 1 2 1 3
*/

1.矩阵游戏

【问题描述】

小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:
行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色);
列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色);
游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。
对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!于是小Q决定写一个程序来判断这些关卡是否有解。

【输入格式】

第一行包含一个整数T,表示数据的组数。
接下来包含T组数据,每组数据第一行为一个整数N(N ≤ 200),表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

【输出格式】

包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

【样例输入】


      2 
      0 0
      0 1
      3
      0 0 1
      0 1 0
      1 0 0

【样例输出】

No
      Yes

#include<cstdio>
#include<cstring>
using namespace std;
int T,n,lnk[][],p[];
bool vis[];
int read() {
int ret=;
char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') ret=ret*+ch-'',ch=getchar();
return ret;
}
bool DFS(int x) {
for(int j=; j<=lnk[x][]; j++)if(!vis[lnk[x][j]]) {
vis[lnk[x][j]]=;
if(!p[lnk[x][j]]||DFS(p[lnk[x][j]])) {
p[lnk[x][j]]=x;
return ;
}
}
return ;
}
int main() {
T=read();
bool flg;
while(T--) {
n=read();
for(int i=; i<=n; i++) {
p[i]=lnk[i][]=;
for(int j=; j<=n; j++) if(read()) lnk[i][++lnk[i][]]=j;
}
flg=;
for(int i=; i<=n; i++) {
memset(vis,,sizeof vis);
if(!DFS(i)) {
puts("No"),flg=;
break;
}
}
if(flg) puts("Yes");
}
return ;
}
/*
2
2
0 0
0 1
3
0 0 1
0 1 0
1 0 0 1
3
1 1 0
0 1 0
1 0 0 3
1
1
1
0
2
1 1
1 0 3
2
0 0
0 0
2
1 1
1 1
4
1 0 1 0
0 1 0 1
1 0 0 0
1 1 1 1 */

noip第27课作业的更多相关文章

  1. noip第5课作业

    1.     计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...

  2. noip第4课作业

    1.    计算邮资 [问题描述] 根据邮件的重量和用户是否选择加急计算邮费.计算规则:重量在1000克以内 (包含1000克),基本费8元.超过1000克的部分,每500克加收超重费4元,不足500 ...

  3. noip第3课作业

    1.    求最大值 [问题描述] 输入三个数a,b,c,输出三个整数中的最大值 [样例输入] 10 20 30 [样例输出] 30 #include <iostream> using n ...

  4. noip第9课作业

    1.    打印乘法表 [问题描述] 用for循环实现输出1至9的乘法表 [样例输出] 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4 ...

  5. noip第8课作业

    1.     计算书费 [问题描述]下面是一个图书的单价表: 计算概论 28.9 元/本 数据结构与算法 32.7 元/本 数字逻辑 45.6元/本 C++程序设计教程 78 元/本 人工智能 35  ...

  6. noip第27课资料

  7. noip第34课作业

    1.    信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...

  8. noip第33课作业

    1.    排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...

  9. noip第29课作业

    1.   钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...

随机推荐

  1. c# 24种设计模式5原型模式(Prototype)

    前言 原型模式其实C# Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式. 定义 原型模式就是在系统clone()标记的基础上,对Clo ...

  2. c#多线程下的进程同步SignalAndWait 使用简单说明

    解释:向一个 WaitHandle 发出信号并等待另一个进入信号. 总体概述: .NET Framework中提供一些类用于手动进行线程间的访问同步.这些类主要分为3大类别(但正如下文中会看到的这些类 ...

  3. PAT 1027 打印沙漏(20)(思路)

    1027 打印沙漏(20)(20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓& ...

  4. andorid 对话框

    activity_ui2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  5. iOS.ChangeIniOS7

    1. Multitasking in iOS 7 http://www.objc.io/issue-5/multitasking.html http://www.slideshare.net/mrem ...

  6. Porsche PIWIS TESTER III

    Allscanner VXDIAG Porsche Piwis III with Lenovo T440P Laptop  Porsche Piwis tester III V37.250.020 N ...

  7. C++基础教程(总结)

    内容中包含 base64string 图片造成字符过多,拒绝显示

  8. Eclipse中配置Tomcat服务器并创建标准Web目录

    Eclipse创建 Java Web 项目,并生成标准的目录结构 file --> New --> Dynamic Web project 填写 Project name (该名称项目的名 ...

  9. mapreduce的输入格式 --- InputFormat

    InputFormat 接口决定了mapreduce如何切分输入文件. InputFormat 由getspilit和createRecordReader组成,getspilit主要是标记分片的初始位 ...

  10. Activiti 5.18启动流程到完成所有任务之间的数据库变化(转)

    来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图,很简单的流程,就是两个UserTask: 代码如下: DeploymentBuilder builder ...