题解:

我严重怀疑语文水平(自己的和出题人的)

把航线按照拓扑关系建立DAG

然后最小路径覆盖

为什么两条首尾相接航线之间不用维护????

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=;
const int oo=; int n,m;
int w[maxn];
int d[maxn][maxn];//d[x][y]从x到y,w[x]w[y]不算的最短路
int g[maxn][maxn]; int rs[maxn],rt[maxn],rb[maxn]; struct Edge{
int from,to,cap,flow;
};
vector<int>G[maxn];
vector<Edge>edges;
void Addedge(int x,int y,int z){
Edge e;
e.from=x;e.to=y;e.cap=z;e.flow=;
edges.push_back(e);
e.from=y;e.to=x;e.cap=;e.flow=;
edges.push_back(e);
int c=edges.size();
G[x].push_back(c-);
G[y].push_back(c-);
} int s,t;
int vis[maxn];
int dd[maxn];
queue<int>q;
int Bfs(){
memset(vis,,sizeof(vis));
vis[s]=;dd[s]=;q.push(s);
while(!q.empty()){
int x=q.front();q.pop();
for(int i=;i<G[x].size();++i){
Edge e=edges[G[x][i]];
if((e.cap>e.flow)&&(!vis[e.to])){
vis[e.to]=;
dd[e.to]=dd[x]+;
q.push(e.to);
}
}
}
return vis[t];
} int cur[maxn];
int Dfs(int x,int a){
if((x==t)||(a==))return a; int nowflow=,f=;
for(int i=cur[x];i<G[x].size();++i){
cur[x]=i;
Edge e=edges[G[x][i]];
if((dd[x]+==dd[e.to])&&((f=Dfs(e.to,min(a,e.cap-e.flow)))>)){
nowflow+=f;
a-=f;
edges[G[x][i]].flow+=f;
edges[G[x][i]^].flow-=f;
if(a==)break;
}
}
return nowflow;
} int Maxflow(){
int flow=;
while(Bfs()){
memset(cur,,sizeof(cur));
flow+=Dfs(s,oo);
}
return flow;
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)scanf("%d",&w[i]);
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
scanf("%d",&d[i][j]);
g[i][j]=d[i][j];
}
} for(int k=;k<=n;++k){
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
if(d[i][k]+w[k]+d[k][j]<d[i][j]){
d[i][j]=d[i][k]+w[k]+d[k][j];
}
}
}
} for(int i=;i<=m;++i){
scanf("%d%d%d",&rs[i],&rt[i],&rb[i]);
} s=m+m+;t=s+;
for(int i=;i<=m;++i)Addedge(s,i,);
for(int i=;i<=m;++i)Addedge(i+m,t,);
for(int i=;i<=m;++i){
for(int j=;j<=m;++j){
if(i==j)continue;
// cout<<i<<' '<<j<<' '<<w[rs[j]]<<' '<<d[rt[i]][rs[j]]+w[rs[j]]<<endl;
if(rb[i]+g[rs[i]][rt[i]]+w[rt[i]]+((rt[i]!=rs[j])?d[rt[i]][rs[j]]+w[rs[j]]:)<=rb[j]){
Addedge(i,m+j,);
}
}
}
cout<<m-Maxflow()<<endl;
return ;
}

最新文章

  1. cron(CronTrigger)表达式用法
  2. 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout
  3. 6.1-CALayer 使用
  4. java编程思想-java中的并发(二)
  5. Swing杂记——Swing中引入Android的NinePatch技术,让Swing拥有Android的外观定制能力
  6. centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
  7. Brn系列商城3.0测试版正式发布,欢迎大家下载测试
  8. 第二百七十九天 how can I 坚持
  9. node.js 入门教程(beginnder guide
  10. drupal7 安装百度编辑器Ueditor及后续使用
  11. nodejs6下使用koa2
  12. SHELL 脚本小技巧
  13. 安装 kubernetes v1.11.1
  14. luogu2634 聪聪可可 (树形dp)
  15. Type Call requires API level 11 (current min is 8)解决办法
  16. day039 数据库索引
  17. python调用shell脚本
  18. IOS初级:UIwindow
  19. Oracle EBS 跳跳转标准销售订单程序转标准销售订单程序
  20. navicat编辑记录 (zhuan)

热门文章

  1. SignalR Connection has not been fully initialized
  2. 《iOS开发进阶》书籍目录
  3. idea2019 3.3最新版本破解安装教程
  4. 吴裕雄--天生自然HADOOP操作实验学习笔记:pvuv统计案例理论
  5. ADV-292 计算行列式 java
  6. Keras入门——(5)长短期记忆网络LSTM(二)
  7. 第1节 kafka消息队列:5、javaAPI操作
  8. IOS 导航栏颜色 标题
  9. 利用Docker构建开发环境
  10. 简单模拟IOC容器:返回对象并能抛出异常