首页 > 代码库 > Dwarf Tower
Dwarf Tower
75分乱搞DFS:
源代码:#include<cstdio>#include<algorithm>using namespace std;struct Node{ int T,X,Y;}Edge[100001];int n,m,i[10001];int main(){ scanf("%d%d",&n,&m); for (int a=1;a<=n;a++) scanf("%d",&i[a]); for (int a=1;a<=m;a++) { scanf("%d%d%d",&Edge[a].T,&Edge[a].X,&Edge[a].Y); i[Edge[a].T]=min(i[Edge[a].X]+i[Edge[a].Y],i[Edge[a].T]); } for (int a=m;a>=1;a--) i[Edge[a].T]=min(i[Edge[a].X]+i[Edge[a].Y],i[Edge[a].T]); printf("%d",i[1]); return 0;}/* AC就是AC了,没有理由。 数据水也不至于水到这种地步吧!*/
骇人听闻的数据:
源代码:#include<cstdio>#include<vector>#include<algorithm>using namespace std;struct Node{ int X,Y; Node(int t1,int t2) { X=t1; Y=t2; }};vector <Node> List[10001];int m,n,i[10001];bool Vis[10001]={0};void DFS(int t) //倒序记忆化DFS。{ Vis[t]=true; int L=List[t].size(); for (int a=0;a<L;a++) { int t1=List[t][a].X; int t2=List[t][a].Y; if (!Vis[t1]) DFS(t1); if (!Vis[t2]) DFS(t2); i[t]=min(i[t],i[t1]+i[t2]); }}int main() //可以发现,在树套树的时候,就会出现错误。{ scanf("%d%d",&n,&m); for (int a=1;a<=n;a++) scanf("%d",&i[a]); for (int a=0;a<m;a++) { int t,t1,t2; scanf("%d%d%d",&t,&t1,&t2); List[t].push_back(Node(t1,t2)); } DFS(1); printf("%d",i[1]); return 0;}
SPFA正解:
源代码:#include<cstdio>#include<queue>#include<vector>#include<algorithm>#define LL long longusing namespace std;struct Node{ LL X,Y; Node(LL t1,LL t2) { X=t1; Y=t2; }};queue <int> Q;vector <Node> List[10001];LL m,n,i[10001];bool In[10001];int main() //挺动脑子的一道题。{ scanf("%lld%lld",&n,&m); for (LL a=1;a<=n;a++) scanf("%lld",&i[a]); for (LL a=1;a<=m;a++) { LL t,t1,t2; scanf("%d%d%d",&t,&t1,&t2); List[t1].push_back(Node(t,t2)); List[t2].push_back(Node(t,t1)); } for (LL a=1;a<=n;a++) { Q.push(a); In[a]=true; } while (!Q.empty()) //可以朦朦胧胧地看做是某一个神秘点到节点的距离,转换成SPFA,不断更新就好了。 { LL t=Q.front(); Q.pop(); In[t]=false; for (LL a=0;a<List[t].size();a++) { LL t1=List[t][a].X; LL t2=List[t][a].Y; if (i[t2]+i[t]<i[t1]) { i[t1]=i[t2]+i[t]; if (!In[t1]) { Q.push(t1); In[t1]=true; } } } } printf("%lld",i[1]); return 0;}
Dwarf Tower
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。