基础:
   HDU1596
   HDU2112 
   HDU1874 
   HDU1869 
   HDU2066 
   HDU2094
   HDU2544 
稍加复杂:
HDU1217    顺练习map离散    难度1.
HDU1245    处理起点,终点    难度2.
HDU1535    2次迪杰斯特拉      难度2
HDU2170                     难度x
HDU3631                     难度x
HDU4284   BFS+floyd     难度2.
加深对k的理解:
 HDU1599(最小环) 
ZOJ3710
判环:
 HDU1317   暴力搜索+floyd
HDU1217
#include<cstdlib>
#include<iostream>
#include<map>
using namespace std;
int n,m,Case=;
map<string,int>q;
double Map[][],tmp;
string s,s1,s2;
int main()
{
int i,j,k;
bool flag;
while(~scanf("%d",&n)){
if(n<=) return ;
q.clear();
for(i=;i<=n;i++){
cin>>s;
q[s]=i;
}
cin>>m;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(i==j) Map[i][j]=;
else Map[i][j]=;
for(i=;i<=m;i++){
cin>>s1>>tmp>>s2;
Map[q[s1]][q[s2]]=tmp;
} for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(Map[i][j]<Map[i][k]*Map[k][j])
Map[i][j]=Map[i][k]*Map[k][j]; flag=false;
for(i=;i<=n;i++)
if(Map[i][i]>) {flag=true;break;}
printf("Case %d: ",++Case);
if(flag) printf("Yes\n");
else printf("No\n");
}
return ;
} HDU1245
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<algorithm>
#include<cmath>
using namespace std;
const double inf=;
int n;
double Map[][],x[],y[],d;
int step[][];
int main()
{
int i,j,k;
while(~scanf("%d%lf",&n,&d)){
n++;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
Map[i][j]=inf;
step[i][j]=inf;
}
for(i=;i<n;i++)
{
cin>>x[i]>>y[i];
double tmp=sqrt((x[i]*x[i])+(y[i]*y[i]));
if(tmp-7.5<=d&&tmp>7.5){//不加tmp>7.5就错了,因为会出现负数Map
Map[][i]=tmp-7.5;
step[][i]=;
}
}
if(d>=42.5){
Map[][n]=42.50;
step[][n]=;
}
for(i=;i<n;i++)
for(j=i+;j<n;j++)
{
double tmp=sqrt(((x[i]-x[j])*(x[i]-x[j]))+((y[i]-y[j])*(y[i]-y[j])));
if(tmp<=d){
Map[i][j]=tmp;
step[i][j]=;
Map[j][i]=tmp;
step[j][i]=;
}
}
for(i=;i<n;i++)
{
double tmp=min(abs(-x[i]),abs(+x[i]));
tmp=min(tmp,abs(-y[i]));
tmp=min(tmp,abs(+y[i]));
if(tmp<=d){
Map[i][n]=tmp;
step[i][n]=;
}
}
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
if(Map[i][j]>Map[i][k]+Map[k][j]){
Map[i][j]=Map[i][k]+Map[k][j];
step[i][j]=step[i][k]+step[k][j];
}
else if(Map[i][j]==Map[i][k]+Map[k][j])
step[i][j]=min(step[i][j],step[i][k]+step[k][j]);
}
if(Map[][n]==inf) printf("can't be saved\n");
else printf("%.2lf %d\n",Map[][n],step[][n]);
}
return ;
} HDU1596
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<queue>
#include<algorithm>
#include<vector>
#include<map>
#include<memory.h>
using namespace std;
double Map[][];
int main()
{
int n,i,j,k,m,a,b;
while(~scanf("%d",&n)){
for(i=;i<=n;i++)
for(j=;j<=n;j++)
scanf("%lf",&Map[i][j]);
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(Map[i][j]<Map[i][k]*Map[k][j])
Map[i][j]=Map[i][k]*Map[k][j];
scanf("%d",&m);
while(m--){
scanf("%d%d",&a,&b);
if(Map[a][b]==) printf("What a pity!\n");
else printf("%.3lf\n",Map[a][b]);
}
}
return ;
} HDU1535
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<algorithm>
#include<queue>
using namespace std;
const int inf=;
const int Maxn=;
const int Maxm=;
int dis1[Maxn],Laxt1[Maxn],len1[Maxm],To1[Maxm],Next1[Maxm];
int dis2[Maxn],Laxt2[Maxn],len2[Maxm],To2[Maxm],Next2[Maxm];
int n,m,cnt1,cnt2;
queue<int>q1;
queue<int>q2;
bool w1[Maxn];
bool w2[Maxn];
void _update()
{
dis1[]=;
for(int i=;i<=n;i++) dis1[i]=inf;
memset(Laxt1,,sizeof(Laxt1));
memset(w1,,sizeof(w1));
cnt1=; dis2[]=;
for(int i=;i<=n;i++) dis2[i]=inf;
memset(Laxt2,,sizeof(Laxt2));
memset(w2,,sizeof(w2));
cnt2=;
}
void _add(int u,int v,int d)
{
Next1[++cnt1]=Laxt1[u];
Laxt1[u]=cnt1;
To1[cnt1]=v;
len1[cnt1]=d; Next2[++cnt2]=Laxt2[v];
Laxt2[v]=cnt2;
To2[cnt2]=u;
len2[cnt2]=d;
}
void _init()
{
int i,x,y,z;
for(i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
_add(x,y,z);
}
}
void _dij1()
{
q1.push();
w1[]=true;
while(!q1.empty()){
int s=q1.front();
q1.pop();
w1[s]=false;
for(int i=Laxt1[s];i>;i=Next1[i]){
if(dis1[To1[i]]>dis1[s]+len1[i]){
dis1[To1[i]]=dis1[s]+len1[i];
if(!w1[To1[i]]){
w1[To1[i]]=true;
q1.push(To1[i]);
}
}
}
}
}
void _dij2()
{
q2.push();
w2[]=true;
while(!q2.empty()){
int s=q2.front();
q2.pop();
w2[s]=false;
for(int i=Laxt2[s];i>;i=Next2[i]){
if(dis2[To2[i]]>dis2[s]+len2[i]){
dis2[To2[i]]=dis2[s]+len2[i];
if(!w2[To2[i]]){
w2[To2[i]]=true;
q2.push(To2[i]);
}
}
}
}
}
int main()
{
int T,i,j,k;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
_update();
_init();
_dij1();
_dij2();
int ans=;
for(i=;i<=n;i++)
ans+=dis1[i]+dis2[i];
cout<<ans<<endl;
}
return ;
} HDU1869
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<memory.h>
using namespace std;
const int inf=;
int Map[][],m,n;
int k,i,j;
int x,y,z,s,t; int main()
{
while(~scanf("%d%d",&n,&m)){
for(i=;i<n;i++)
for(j=;j<n;j++)
if(i!=j) Map[i][j]=inf;
for(i=;i<=m;i++){
scanf("%d%d",&x,&y);
Map[x][y]=;
Map[y][x]=;
}
for(k=;k<n;k++)
for(i=;i<n;i++)
for(j=;j<n;j++)
if(Map[i][j]>Map[i][k]+Map[k][j])
Map[i][j]=Map[i][k]+Map[k][j];
bool flag=true;
for(i=;i<n;i++)
for(j=i+;j<n;j++)
if(Map[i][j]>) { flag=false;break;}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return ;
} hdu1599
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<memory.h>
using namespace std;
const int inf=;
int Map[][],mp[][],m,n;
int k,i,j;
int x,y,z,s,t; int main()
{
while(~scanf("%d%d",&n,&m)){
for(i=;i<=n;i++)
for(j=;j<=n;j++)
Map[i][j]=inf;
for(i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
if(Map[x][y]>z) Map[x][y]=z;
if(Map[y][x]>z) Map[y][x]=z;
}
for(i=;i<=n;i++)
for(j=;j<=n;j++)
mp[i][j]=Map[i][j];
int ans=inf;
for(k=;k<=n;k++){ for(i=;i<k;i++)
for(j=i+;j<k;j++)
if(mp[i][k]+mp[j][k]+Map[i][j]<ans)
ans=mp[i][k]+mp[j][k]+Map[i][j]; for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(Map[i][j]>Map[i][k]+Map[k][j])
Map[i][j]=Map[i][k]+Map[k][j];
}
if(ans>=inf) cout<<"It's impossible."<<endl;
else cout<<ans<<endl;
}
return ;
} HDU1874
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<memory.h>
using namespace std;
const int inf=;
int Map[][],m,n;
int k,i,j;
int x,y,z,s,t; int main()
{
while(~scanf("%d%d",&n,&m)){
for(i=;i<n;i++)
for(j=;j<n;j++)
if(i!=j) Map[i][j]=inf;
for(i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
if(Map[x][y]>z) Map[x][y]=z;
if(Map[y][x]>z) Map[y][x]=z;
}
scanf("%d%d",&s,&t);
for(k=;k<n;k++)
for(i=;i<n;i++)
for(j=;j<n;j++)
if(Map[i][j]>Map[i][k]+Map[k][j])
Map[i][j]=Map[i][k]+Map[k][j];
if(Map[s][t]==inf) cout<<"-1"<<endl;
else cout<<Map[s][t]<<endl;
}
return ;
} hdu2094
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<queue>
#include<algorithm>
#include<vector>
#include<map>
#include<memory.h>
using namespace std;
map<string,int>q;
int Map[][];
int main(){
int n,cnt,i,k,j;
string s1,s2;
while(~scanf("%d",&n)){
if(n==) return ;
cnt=;
q.clear();
memset(Map,,sizeof(Map));
for(i=;i<=n;i++){
cin>>s1>>s2;
if(q.find(s1)==q.end()) q[s1]=++cnt;
if(q.find(s2)==q.end()) q[s2]=++cnt;
Map[q[s1]][q[s2]]=;
}
for(k=;k<=cnt;k++)
for(i=;i<=cnt;i++)
for(j=;j<=cnt;j++)
if(Map[i][k]==&&Map[k][j]==) Map[i][j]=;
bool ok,over=false;
for(i=;i<=cnt;i++){
ok=true;
for(j=;j<=cnt;j++){
if(i==j) continue;
if(Map[i][j]!=) ok=false;
if(Map[j][i]==) ok=false;
}
if(ok) {
printf("Yes\n");
over=true;
break;
}
}
if(!over) printf("No\n");
}
return ;
} HDU2112
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<map>
#include<cstring>
#include<string>
#include<memory.h>
using namespace std;
const long long Inf=;
int n,i,j,k,cnt;
long long d;
map<string,int>q;
long long m[][];
string s1,t1,x,y;
int main()
{
while(~scanf("%d",&n)){
if(n==-) return ;
cnt=;
for(i=;i<=;i++)
for(j=;j<=;j++)
if(i==j) m[i][j]=;
else m[i][j]=Inf;
q.clear(); cin>>s1>>t1; for(i=;i<=n;i++){
cin>>x>>y>>d;
if(q.find(x)==q.end()) q[x]=++cnt;
if(q.find(y)==q.end()) q[y]=++cnt;
if(m[q[x]][q[y]]>d) m[q[x]][q[y]]=d;
if(m[q[y]][q[x]]>d) m[q[y]][q[x]]=d;
}
for(k=;k<=cnt;k++)
for(i=;i<=cnt;i++)
for(j=;j<=cnt;j++)
if(m[i][k]+m[k][j]<m[i][j]) m[i][j]=m[i][k]+m[k][j];
if(q[s1]>=&&q[t1]>=&&m[q[s1]][q[t1]]!=Inf) cout<<m[q[s1]][q[t1]]<<endl;
else cout<<"-1"<<endl;
}
return ; HDU2066
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<queue>
using namespace std;
queue<int>q;
const int Inf=0x3f3f3f3f;;
const int Maxm=;
const int Maxn=;
int dis[Maxn],cnt,n,Min,c,dr;
int Laxt[Maxm],Next[Maxm],To[Maxm],Len[Maxm];
int conti[Maxn],dream[Maxn];
int Win[Maxn];
void _add(int u,int v,int d){
Next[++cnt]=Laxt[u];
Laxt[u]=cnt;
To[cnt]=v;
Len[cnt]=d; Next[++cnt]=Laxt[v];
Laxt[v]=cnt;
To[cnt]=u;
Len[cnt]=d;
}
void _dij()
{
while(!q.empty()){
int s=q.front();
q.pop();
Win[s]=;
for(int i=Laxt[s];i>;i=Next[i]){
if(dis[s]+Len[i]<dis[To[i]])
{
dis[To[i]]=dis[s]+Len[i];
if(!Win[To[i]]) {
q.push(To[i]);
Win[To[i]]=;
}
}
}
}
}
int main()
{
int m,i,j,k,x,y,z;
while(cin>>m>>c>>dr)
{
memset(Laxt,,sizeof(Laxt));
memset(Next,,sizeof(Next));
memset(Win,,sizeof(Win));
cnt=;
for(i=;i<=m;i++) {
scanf("%d%d%d",&x,&y,&z);
_add(x,y,z);
dis[x]=Inf;
dis[y]=Inf;
}
for(i=;i<=c;i++) {
scanf("%d",&conti[i]);
dis[conti[i]]=;
q.push(conti[i]);
Win[conti[i]]=;
}
for(i=;i<=dr;i++) {
scanf("%d",&dream[i]);
dis[dream[i]]=Inf;
}
_dij();
Min=Inf;
for(j=;j<=dr;j++)
if(Min>dis[dream[j]]) {
Min=dis[dream[j]];
}
printf("%d\n",Min);
}
return ;
} HDU4284
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<algorithm>
using namespace std;
const int inf=0x3fffffff;
int Map[][];
int City[],Ci[],Di[];
int n,m,Mon,H,T;
int used[];
bool ok;
void _tempt(int u,int k,int tmp)
{
if(k==H)
if(tmp>=Map[u][]){
ok=true;
return ;
}
for(int i=;i<=H;i++){
if(used[City[i]]!=T&&Map[u][City[i]]!=inf){
if(tmp-Map[u][City[i]]>=Di[i])
{
used[City[i]]=T;
_tempt(City[i],k+,tmp-Map[u][City[i]]-Di[i]+Ci[i]);
}
if(ok) return ;
used[City[i]]=;
}
}
}
int main()
{
int x,y,z,i,j,k;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&Mon);
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(i==j) Map[i][j]=;
else Map[i][j]=inf; for(i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
if(z<Map[x][y]) Map[x][y]=z;
if(z<Map[y][x]) Map[y][x]=z;
} for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(Map[i][j]>Map[i][k]+Map[k][j])
Map[i][j]=Map[i][k]+Map[k][j]; scanf("%d",&H);
for(i=;i<=H;i++)
scanf("%d%d%d",&City[i],&Ci[i],&Di[i]);
ok=false;
_tempt(,,Mon);
if(ok) printf("YES\n");
else printf("NO\n");
}
return ;
}

最近做的floyd的题目的更多相关文章

  1. 做 fzu oj 1106 题目学到的

    题目如下 这道题的意识就是给一个数问是否可以又阶乘之和构成,而难点主要是在于如果是7的话就是1!+3!,并不是单纯的从1的阶乘开始加,而是没顺序的,所以这题就得用到递归. (大概就是函数自己调用函数自 ...

  2. JOJ1202。重新操刀ACM,一天一练!做个简单的题目温习。

    http://ac.jobdu.com/problem.php?pid=1202 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100).   ...

  3. CF 题目选做

    写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...

  4. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. 温故知新 —— Floyd算法

    什么?Floyd?sb O(n ^ 3) 算法早不用了,右上角红叉吧.我之前虽然也认识过 Floyd 算法的重要性,不过多少也是这么想的.然而最近三天连续 rand 到了好几道有关的题目,让我彻底重新 ...

  6. 连连看游戏(dfs)【华为上机题目】

    1 连连看游戏 今天同学给我做了道编程题目,貌似是华为的,题目描述大概是这样的: 给定一个连连看棋盘,棋盘上每个点都有各种图案(用非0数字表示),输入棋盘上的任意两个左标,判断这两个坐标对应的图案是否 ...

  7. 华为OJ题目:刷题

    题目描述: 新入职华为的小伙伴们都有在oj上面刷题的任务,共需要刷100道初级题,45道中级题,5道高级题,其中,做出来的高级题如果超标可以当初级或者中级题,做出来的中级题如果超标可以当初级题.每天, ...

  8. 做ctf题对malloc的疑问

    做cctf pwn printf题目的时候 疑问为什么dir函数会将之前out的name倒叙输出 调试了一下发现当malloc(0xf4)大小时候,例如 第一次分配0x1000的地址,将名字输入到0x ...

  9. jarvis OJ WEB题目writeup

    0x00前言 发现一个很好的ctf平台,题目感觉很有趣,学习了一波并记录一下 https://www.jarvisoj.com 0x01 Port51 题目要求是用51端口去访问该网页,注意下,要用具 ...

随机推荐

  1. javascript中this的指向

    作为一个前端小白在开发中对于this的指向问题有时候总是会模糊,于是花时间研究了一番. 首先this是JS的关键字,this是js函数在运行是生成的一个内部对象,生成的这个this只能在函数内部使用. ...

  2. Project 10:简单图像的绘制

    目标:绘制如图图像 #include <stdio.h> int main() { int n,i,j,o,k=0; printf("请输入一个数:"); scanf( ...

  3. Android微信登录、分享、支付

    转载需要著名出处: http://blog.csdn.net/lowprofile_coding/article/details/78004224 之前写过微信登录分享支付第一版: http://bl ...

  4. 201521123111《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...

  5. 201521123072《java程序设计》第十四周学习总结

    201521123072<java程序设计>第十四周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库 ...

  6. 201521123109《java程序设计》第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自 ...

  7. 下载安装ActiveMQ(消息队列)

    安装步骤: 第一步.安装jdk环境,因为ActiveMQ是使用java语言编写. 第二步.将下载好的activemq压缩包上传至Linux系统,进行解压. 第三步.进入解压后的bin/目录,进行启动a ...

  8. Hyperledger Fabric 1.0 从零开始(三)——环境构建(内网/准离线)

    有公网环境的服务器可以直接看 Hyperledger Fabric 1.0 从零开始(二)--环境构建(公网) ,本篇内容与上篇相似,只不过环境搭建需要在内网下,也就是网络被限制的情况下. 1:环境构 ...

  9. 分区工具fdisk,gdisk,parted

    在linux中,当我们给系统添加一块新硬盘时,我们是无法使用的,因为他还没有分区和格式化,只有当我们将新硬盘分区并格式化之后,挂载在某个目录下,才能供我们正常使用,接下来我们要学习三种硬盘分区工具,f ...

  10. JDBC操作数据库之删除数据

    删除数据使用的SQL语句为delete语句,如果删除图书id为1的图书信息,其SQL语句为: delete from book where id=1 在实际开发中删除数据通常使用PreparedSta ...