9.12
来源:互联网 发布:广联达装修预算软件 编辑:程序博客网 时间:2024/06/05 14:10
是是是,我已经好多天没有写博客了,blog已经被我ignore了,hehe。
我们的学校,唉,把我们的放假时间从短暂的四天压缩到了简直可以忽略不计的两天,唉。
但是——不幸中的万幸,这两天我们可以整天泡机房,啦啦啦~\(≧▽≦)/~。
于是,这两天,我们开启了图论的学习之旅。它需要你有非一般的数学头脑,然而,我呢,进入高中以来,脑子就锈掉了,就没正常过。这两天整天泡在机房,再加上身心俱疲,我老是掉线。哎呀,这一掉线可不得了,那可是灭顶之灾啊。于是,从那个什么迪杰斯特拉开始,我就hehe了。然后呢,昨天晚上我本来回去开夜车好好补一下的,结果呢,刚好看到dijkstra我就心累了,就去zzz了。所以,没懂的照样没懂。
到现在为止,我们学了图的基本概念,图的存储方式(邻接矩阵和邻接表),图的遍历(dfs,bfs),贪心算法求最小路径(佛洛依德floyed,迪杰斯特拉dijkstra,贝尔曼福德bellman-ford,还有中国的SPFA),最小生成树(普利姆prim),拓扑排序。。。我可谓是浆糊一片了。。。
但在luogu的团队里,我还是去积极的完成作业的,恩就是这样,下面附上这两天我敲完的代码:
#A(我们团队里的题)田地上的环:
题目描述
FJ 让他的N (1 <= N <= 250)只编号为从1到N的奶牛在田地里玩.这些奶牛决定用M条(1<=M<=N*(N+1)/2)牛绳将各自连接起来.当然,不会出现一对牛被两条及以上牛绳连接起来.输入告诉你每一条牛绳连接的两只奶牛C1和C2(1 <= c1 <= N; 1 <= c2 <= N; c1 <> c2).
FJ要求奶牛们与1号奶牛相连.现在你要帮助FJ找出所有没有与1号奶牛相连的奶牛.这里的相连既可以是直接的,也可以是间接的(特别的,1号奶牛总是与自己相连).将没有与1号奶牛相连的奶牛的编号升序输出.如果你找不到这样的一只牛,那么就输出0.
输入输出格式
输入格式:第1行:两个用空格分开的整数N,M
第2..M+1行:每一行有两个整数.第i+1行描述的是绳子i连接的两只奶牛的编号,即C1和C2.
输出格式:很多行:每一行包含一个整数,意义如题目所说.升序输出.
输入输出样例
6 41 32 31 24 5
456
这道题是无向图+邻边矩阵+dfs遍历,一道基础题,当然是选择一遍过咯。哦不不不,第一遍提交是90,它告诉我too many or too few lines。什么?我根本就不知道为什么,当然是选择放弃咯。哦不不不,在刘老师的帮助下,他告诉我“输出0”。哦——一听就知道了,要特判!这个是我在C++道路上一直陪伴我的一个 唉。。。之后提交当然是过啦。
#include<bits/stdc++.h>using namespace std;int n,m,x,y,a[255][255]={};bool flag=true,b[255]={};void dfs(int t){b[t]=true;for (int i=1;i<=n;++i)if ((!b[i])&&a[t][i]) dfs(i);}//dfs遍历 int main(){cin>>n>>m;for (int i=1;i<=m;++i){cin>>x>>y; a[x][y]=1; a[y][x]=1;}//用邻接矩阵存储无向图 dfs(1);//题目要求 for (int i=2;i<=n;++i)if (!b[i]){ cout<<i<<endl; flag=false;//flag用来特判是否有输出}if (flag==true) cout<<"0";//如果没有输出,那么输出0 return 0;}
#B图的遍历:
这道题有60分版的和100分版的,100分的我暂时还没去挑战,(因为脑细胞有限,,,60分版的是有向图+邻接矩阵+dfs,我是真的对我自己生无可恋,我敲了两遍这道题,用两种不同的方法,结果两遍都敲成了无——向——图,唉,这就是不看题目要求想当然的后果啊。
#include<bits/stdc++.h>using namespace std;int n,m,x,y,l,k,a[10005][10005]={};//数组范围不能太大,因此10^5达不到 bool b[10005]={};void dfs(int t){b[t]=true;for (int j=1;j<=n;++j)if ((!b[j])&&a[t][j]) dfs(j);}//dfs遍历 int main(){cin>>n>>m;for (int i=1;i<=m;++i){cin>>x>>y;a[x][y]=1;}//用邻接矩阵存储有向图 for (int i=1;i<=n;++i){memset(b,0,sizeof(b));//每一遍dfs(i)都要重置数组 dfs(i);for (int k=n;k>=1;k--)if (b[k]){cout<<k<<" ";break;} }return 0;}
这道题是求最小路径,贪心,无向图+邻接矩阵+floyed算法,一遍过。
#include<bits/stdc++.h>using namespace std;int n,x,y,z,t,min_=2000000000,a[60][60];char b,c;void floyed(){for (int k=1;k<=52;++k)for (int i=1;i<=52;++i)for (int j=1;j<=52;++j)if (a[i][k]+a[k][j]<a[i][j]) a[i][j]=a[i][k]+a[k][j];}//floyed算法 int main(){cin>>n;memset(a,10,sizeof(a));//a数组初始一个很大的值 for (int i=1;i<=n;++i){cin>>b>>c>>z;if (b>='A'&&b<='Z') x=b-64;if (b>='a'&&b<='z') x=b-70;if (c>='A'&&c<='Z') y=c-64;if (c>='a'&&c<='z') y=c-70;//因为输入的是大小写字母,要转化一下 a[x][y]=min(a[x][y],z);a[y][x]=min(a[y][x],z);//这两句是要考虑权值覆盖的问题 }floyed();for (int i=1;i<=25;++i){if (a[26][i]<min_){min_=a[26][i];t=i;} if (a[i][26]<min_) { min_=a[i][26]; t=i; }}//找最小路径 x=char(t+64);//因为输出的是字母,要处理一下 cout<<x<<" "<<min_;return 0;}
这道题也是求最小路径,贪心,但是无向图+邻接矩阵+dijkstra算法,也是一遍过。
#include<bits/stdc++.h>using namespace std;int t,c,tc,te,x,y,z,a[2505][2505],d[2505];void dijkstra(int st){bool b[2505]={};for (int i=1;i<=t;++i)d[i]=a[st][i]; b[st]=true; d[st]=0; for (int i=1;i<=t-1;++i) { int min_=2000000000,k=0; for (int j=1;j<=t;++j) if ((!b[j])&&d[j]<min_) { min_=d[j]; k=j; } if (k==0) return; b[k]=true; for (int j=1;j<=t;++j) if ((!b[j])&&d[k]+a[k][j]<d[j]) d[j]=d[k]+a[k][j]; }}//dijkstra算法 int main(){cin>>t>>c>>tc>>te;memset(a,10,sizeof(a));//a数组初始一个很大的值 for (int i=1;i<=c;++i){cin>>x>>y>>z;a[x][y]=min(a[x][y],z);a[y][x]=min(a[y][x],z);//这两句是要考虑权值覆盖的问题 }dijkstra(tc);//起点 cout<<d[te];//终点 return 0;}
- 9.12
- 9.12
- 9.12
- 9.12
- 习题9.12
- 9.12--9.13
- hw 9.12
- 9.12总结
- Refletion2017.9.12
- 单词:9.08-9.12
- 9.12 小 结
- c++primer 习题9.12
- 壮志多坎坷(9.12)
- 9.12小问题解决
- 9.12学习笔记
- 9.12 工程日志
- 9.12日考试总结
- 【NOIP2015 模拟9.12】平方和
- 为什么 Python 不支持函数重载?
- 一条相关子查询的SQL优化
- Java ClassPath环境变量详解
- SSM中静态资源配置
- String、StringBuffer与StringBulider之间的区别
- 9.12
- 《Windows核心编程》の托盘程序的编写(CSystemTray类)
- Tensorflow中计算图机制和常用函数笔记
- 各种依赖
- CSS——EM详细功能介绍
- java 微信小程序登录 验证登录并获取用户信息
- 第一篇 准备
- [RK3288][Android6.0] 调试笔记 --- 命令行恢复出厂设置
- C#数组