9 条题解
-
-1猫粮寸断 LV 10 @ 2018-10-30 14:30:17
没有A掉。。。问了Au爷cwbc,他说这道题他也没A,并且给我玄了下半平面交,放一下70分做法
跑spfa,记录到一个点走了几条x边时的最短路,如果不经过x边无法到达,而经过x边后可到达,那么显然有无数种,如果无论如何都不能到达,那么就无解
之后枚举x边的长度,记录下最短路进行累加#include<iostream> #include<cstring> #include<vector> using namespace std; vector<int> q[510],p[510]; int dui[300010],y[300010],pan[510][510],minn[510][510]; char s[10]; int main() { int n,m,i,j,k,u,v,len,num,e,a,b,head,tail,ha,now,d,ny,sum,ci,maxn,last; cin>>n>>m; for(i=1;i<=m;i++) { scanf("%d%d%s",&u,&v,s); len=strlen(s); q[u].push_back(v); if(s[0]>='0'&&s[0]<='9') { num=0; for(j=0;j<len;j++) { num*=10; num+=s[j]-'0'; } p[u].push_back(num); } else p[u].push_back(-1); } cin>>e; for(j=1;j<=e;j++) { cin>>a>>b; memset(minn,-1,sizeof(minn)); head=1; tail=1; minn[a][0]=0; dui[1]=a; pan[a][0]=1; y[1]=0; while(tail<=head) { ha=dui[tail]; d=q[ha].size(); ny=y[tail]; for(i=0;i<d;i++) { now=q[ha][i]; if(p[ha][i]==-1) { if(ny<n) if(minn[now][ny+1]>minn[ha][ny]||minn[now][ny+1]==-1) { minn[now][ny+1]=minn[ha][ny]; if(!pan[now][ny+1]) { head++; dui[head]=now; y[head]=ny+1; pan[now][ny+1]=1; } } continue; } if(minn[now][ny]>minn[ha][ny]+p[ha][i]||minn[now][ny]==-1) { minn[now][ny]=minn[ha][ny]+p[ha][i]; if(!pan[now][ny]) { head++; dui[head]=now; y[head]=ny; pan[now][ny]=1; } } } pan[ha][ny]=0; tail++; } maxn=minn[b][0]; if(maxn==-1) { for(i=1;i<=n;i++) if(minn[b][i]!=-1) break; if(i>n) cout<<"0 0"<<endl; else cout<<"inf"<<endl; continue; } sum=maxn; num=1; last=-2; for(i=1;;i++) { ci=0x3f3f3f3f; for(k=1;k<=n;k++) if(minn[b][k]!=-1) ci=min(ci,minn[b][k]+k*i); if(ci>=maxn) break; if(ci!=last) { num++; sum+=ci; last=ci; } } cout<<num<<" "<<sum<<endl; } return 0; }
-
-22016-03-13 15:56:52@
妈的发题解也不贴程序,楼下都是智障
-
-22016-03-13 15:55:18@
妈的都是智障
-
-22016-03-13 15:55:00@
妈的楼下全他妈是智障
-
-22016-03-13 14:41:35@
妈的 楼下全是智障
-
-22016-03-13 14:37:25@
妈的 楼下一堆智障
-
-22016-03-13 14:35:29@
楼下妈的智障
-
-32016-03-13 15:59:29@
dfoi来撕逼
-
-32015-12-20 19:30:55@
虽然我没有AC但我来抢个沙发
- 1
信息
- ID
- 1800
- 难度
- 8
- 分类
- (无)
- 标签
- (无)
- 递交数
- 59
- 已通过
- 5
- 通过率
- 8%
- 被复制
- 1
- 上传者