有廉價線路和普通線路,只有一次乘坐普通線路的機會,問從s到e花費最少的線路。並輸出路徑。
由於只有一次機會,因此可以直接列舉乘坐的普通線路。針對每次選擇,兩遍spfa(列舉正向和反向)。至於輸出路徑,只需要記錄每個點的最短路徑上乙個點就可以了。輸出的時候遞迴輸出就可以了。
#include
#define ll long long
#define up(i,l,h) for(int i=l;i#define down(i,h,l) for(int i=h-1;i>=l;i--)
#define w(t) while(t)
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define maxn 510
#define cout(x) cout<#pragma comment(linker, "/stack:102400000,102400000")
using
namespace
std;
struct node
bool
operator == (node b) const
};vector
vc[maxn];
bool vis[maxn];
int dis[maxn],f[maxn],ansf[maxn];
int n,s,e;
void spfa(int x)}}
}}void print(int now)else
printf("%d ",now);
}int main()
scanf("%d",&k);
spfa(s);
int ans=dis[e];
// cout(ans);
memcpy(ansf,f,sizeof(f));
up(i,0,k)
// cout("dis"mem(dis,inf);
vc[y].push_back(node(x,w));
spfa(s);
it=find(vc[y].begin(),vc[y].end(),node(x,w));
vc[y].erase(it);
if(dis[e]memcpy(ansf,f,sizeof(f));
}// cout("dis"<}
print(e);
if(use==-1) puts("ticket not used");
else
printf("%d\n",use);
printf("%d\n",ans);
}}
UVA11374機場快線題目學習
學習 演算法競賽入門經典訓練指南 思考 機場快線 1.對起點和終點呼叫dijkstra 2.列舉所有的商業線 包含沒有使用商業線車票 計算從起點到a,a b,b 終點,並與最小做對比 考慮到所有線路都是雙向的,需要比較兩次 3.列印出訪問順序給出經過的車站。可能需要用到路徑尋找函式find 對於函式...
天路(01規劃 SPFA判負環)
傳送門 公式來自洛谷題解 因為求v之和與p之和的比值的最大值。這個值不超過200 考慮到二分答案,設ans為最大值,則有 可以看出是01分數規劃 那麼每次就重新分配邊的權值 ans ci vi 再判負環,有說明ans不成立,反之成立。特別提一下 這裡判負環是用dfs版的spfa,而不是bfs版的,d...
UVA10917 路徑統計
求s到t特殊路徑統計,路徑上每條邊滿足dt u dt v dt i 是i到達t的最短路。滿足dt u t的路徑數目 1.統計dag圖上任意一點到達t的路徑數目 num i i到達t的路徑數目,由dag圖的dp性質,num u num v v是u的後繼。void dfs int u,int t vec...