基础:
   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. 集美大学网络1413第八次作业(团队四)-- 第一次项目冲刺(Alpha版本)成绩

    首先非常抱歉,刚休完假,凌晨才回来,导致这么晚发布成绩,以后旅行可以考虑带点轻便点的笔记本~ O(∩_∩)O 第一次项目冲刺结束了,可以看出来,有的团队做的很棒,也有的团队组合不是很理想,导致进度一直 ...

  2. 第二次项目冲刺(Beta阶段)第一天

    a. 安排连续七天的敏捷冲刺. 2017.5.18完成冲刺计划安排 2017.5.20完善主页面 1st day(目前位置) 2017.5.21完善功能 2st day 2017.5.22添加自定义重 ...

  3. 201521123008<java程序设计>第三周实验总结

    1.本周学习总结 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; pub ...

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

    Java 第一周学习 1.刚开始学习对java还是陌生的,完全不清楚.通过刚开始的上课,有一点点的了解.刚开始可能相对比较基础,进程有点快,而且多媒体屏幕有点反光,所以还是蛮多不懂的.接下来应该好好努 ...

  5. Python[小甲鱼005Python的数据类型]

    一.数值类型 整形 布尔类型        True 和 False  即1和0 浮点型 e记法                e ,例如      1.5e11 = 150000000000     ...

  6. 201521123005 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  7. 201521123045 《JAVA程序设计》 第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  8. 201521123020《java程序设计》 第11周学习总结

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

  9. Junit4学习(二)测试失败的情况

    一,前言 首先理解: 1,测试用例不是证明你是对的,而是证明你没有错 2,测试用例用来达到想要的预期结果,但对于逻辑错误无能为力 二,两种测试失败:error And Failure 1,Failur ...

  10. Spring注解@Qualifier

    在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean ...