XTU 1245 Hamiltonian Path
$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$C$题
简单题。
注意题目中给出的数据范围:$1 \le ai < bi \le n$,说明这是一个有向无环图,并且哈密顿路一定是$1 \to 2 \to 3 \to \cdots \cdots \to n$。
因此这题就很简单了。哎,明明知道这原本是一个$NP$问题,但在比赛的时候还在不停的想怎么做,没有考虑到数据给出了这样的范围.....真是菜。最后还是机智的队友发现了。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-8; const int maxn=100010; int n,m; LL a[maxn]; int main() { while(~scanf("%d%d",&n,&m)) { memset(a,-1,sizeof a); for(int i=1;i<=m;i++) { int u,v; LL w; scanf("%d%d%lld",&u,&v,&w); if(u!=v-1) continue; if(a[v]==-1) a[v]=w; else a[v]=min(a[v],w); } bool fail=0; for(int i=2;i<=n;i++) if(a[i]==-1) fail=1; if(fail) printf("-1\n"); else { LL sum=0; for(int i=2;i<=n;i++) sum=sum+a[i]; printf("%d\n",sum); } } return 0; }