1,我似乎找到了些。。彻底学习解决这些东西的方法。。
2,嗯。。这个关键是你怎么能转换成图的思想。。图的问题。。打眼一看,我觉得一般人肯定看不出来。。
3,这个要用的BELLMANFORD算法,所以赶紧学学搞个模板。
4,学习知识最简单的方法就是拿个例子给你讲。
嗯,模板让我感觉奇奇怪怪的。
5,还好这代码一遍就过了
#include<iostream> #include<algorithm> #define max 1005 //const int max=1005; const int INF=100000005; using namespace std; int n,ml,md; int al[max],bl[max],dl[max]; int ad[max],bd[max],dd[max]; int d[max]; bool updated; void update(int& x,int y) { if(x>y) { x=y; updated=true; } } void bellmanford() { for(int k=0;k<=n;k++) { updated=false; for(int i=0;i+1<n;i++) { if(d[i+1]<INF) update(d[i],d[i+1]); } for(int i=0;i<ml;i++) { if(d[al[i]-1]<INF) update(d[bl[i]-1],d[al[i]-1]+dl[i]); } for(int i=0;i<md;i++) { if(d[bd[i]-1]<INF) update(d[ad[i]-1],d[bd[i]-1]-dd[i]); } } } int main(){ cin>>n>>ml>>md; for(int i=0;i<ml;i++){cin>>al[i]>>bl[i]>>dl[i]; } for(int i=0;i<md;i++){cin>>ad[i]>>bd[i]>>dd[i]; } fill(d,d+n,0); bellmanford(); if(updated) { cout<<"-1"<<endl; return 0; } fill(d,d+n,INF); d[0]=0; bellmanford(); int res=d[n-1]; if(res==INF) res=-2; cout<<res<<endl; }
6,,