很无聊的背景故事...求最短的时间原来就是省去了检查员最后上山的时间...还让不让人回家了...

感觉这是个最短路

思想是求出来dis 然后求里面最大的那条边 用总长减去最长边 就是答案

写了一个小时...dij用的还是有些不熟练 还出现了初始化dis[0]==1这种卖萌的行为

最后千辛万苦debug结束后发现...超时了...

我还是要放上来纪念这段思想...算法是没错的...虽然很长也很耗时间...但这是我第一次用vector写dij...还是独立...

#define INF 1000500000
int dis[100000];
bool book[100000];
struct node
{
int b;
int w;
};
int n;
int main(){
while(~scanf("%d",&n))
{
int zong=0;
for(int i=1;i<=n;i++)
{
dis[i]=INF; }
memset(book,true,sizeof(book));
dis[1]=0;
book[1]=false;
vector<node >a[n+1];
int q,e,r;
for(int i=1;i<=n-1;i++)
{
scanf("%d%d%d",&q,&e,&r);
node t;
t.b=e;
t.w=r;
a[q].push_back(t);
t.b=q;
a[e].push_back(t);
zong+=r;
}
for(int i=1;i<=n-1;i++)
{
int e=a[1].size();
int minn=INF;
int wh=1;
for(int k=1;k<=n;k++)
{
if(dis[k]<minn&&book[k]==true)
{
minn=dis[k];
wh=k;
}
}
book[wh]=false; int ee=a[wh].size(); for(int k=0;k<ee;k++)
{ if(dis[a[wh][k].b]>dis[wh]+a[wh][k].w&&book[a[wh][k].b]==true)
{
dis[a[wh][k].b]=dis[wh]+a[wh][k].w; }
}
}
int ans=0;
for(int i=2;i<=n;i++)
{
if(dis[i]>ans&&dis[i]<1000005000)
{
ans=dis[i];
}
}
for(int i=1;i<=n;i++)
{
printf("%d ",dis[i]);
}
puts(""); printf("%d\n",zong-ans);
}
}

然后接受了学妹神奇的思想 : x 是y的父节点。dy=dx+1

很简单的就想到排序后直接算了

由于排序方法是这样的 那么当我们算到3->5这条边的时候 3一定已经作为目标被行为过了 所以一开始对dis数组只需要初始化dis[1]为0即可 肯定不会出现3还没有dis值得情况

然而还是wa了.. 有些莫名

struct node
{
int a,b,w;
};
int dis[100050];
int cmp(node a,node b)
{
if(a.a==b.a)
return a.b<b.b;
else return a.a<b.a;
}
int main(){
int n;
while(~scanf("%d",&n))
{
int zong=0;
dis[1]=0;
node q[n-1];
for(int i=0;i<n-1;i++)
{
scanf("%d%d%d",&q[i].a,&q[i].b,&q[i].w);
zong+=q[i].w;
}
sort(q,q+n-1,cmp);
int maxx=0;
for(int i=0;i<n-1;i++)
{
dis[q[i].b]=dis[q[i].a]+q[i].w;
}
for(int i=1;i<=n;i++)
{
if(dis[i]>maxx)
maxx=dis[i];
}
zong-=maxx;
printf("%d\n",zong); }
}

后来我就去看百度了..忽然发现了fa数组的用处..

于是循环找父节点相加就写出来了...

time数组代表的是当前节点的时间 因为它是一棵树所以当前节点时间唯一

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<queue>
using namespace std;
int fa[100050];
int time[100050];
int find(int x)
{
int sum=0;
while(x)
{
sum+=time[x];
x=fa[x];
}
return sum;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int zong=0;
memset(fa,0,sizeof(fa));
int q,e,w;
for(int i=1;i<=n-1;i++)
{
scanf("%d%d%d",&q,&e,&w);
zong+=w;
time[e]=w;
fa[e]=q;
}
int maxx=0;
for(int i=2;i<=n;i++)
{
int sum=find(i);
if(sum>maxx)
maxx=sum;
}
zong-=maxx;
printf("%d\n",zong);
} }

  

将近两个小时过去了...

FZU 2195 思维的更多相关文章

  1. FZU 2195 检查站点

    求出根节点到每个叶子节点的距离,找到最大的.然后总权值减去最大叶子距离就是答案. GNU C++ AC Visual C++  TLE #include<stdio.h> #include ...

  2. FZU Problem 2214 Knapsack problem(背包+思维转换)

    转化思维,把价值当成背包容量,选择最小的花费,从上到下枚举,找到当这个最小的花费. #include<iostream> #include<cstring> #include& ...

  3. L - Tic-Tac-Toe FZU - 2283 (思维)

    题目链接: L - Tic-Tac-Toe FZU - 2283 题目大意:两个人下棋,一共是三步棋,第一个人下一步,第二个人下一步,第三个人下一步,然后问你在两个人在都足够聪明的条件下,第一个人能否 ...

  4. fzu 2250 不可能弹幕结界 分析+模拟,考察思维严谨。

    Problem 2250 不可能弹幕结界 Accept: 5    Submit: 13Time Limit: 1000 mSec    Memory Limit : 65536 KB Problem ...

  5. FZU 2202——犯罪嫌疑人——————【思维题】

    犯罪嫌疑人 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  6. fzu月赛(2015.11)(思维)

    Problem 2205 据说题目很水 Sunday最近对图论特别感兴趣,什么欧拉回路什么哈密顿回路,又是环又是树.在看完一本书后,他对自己特别有信心,便找到大牛牛犇犇,希望他出一题来考考自己. 在遥 ...

  7. FZU 2297 Number theory【线段树/单点更新/思维】

    Given a integers x = 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First l ...

  8. FZU - 2214 Knapsack problem 01背包逆思维

    Knapsack problem Given a set of n items, each with a weight w[i] and a value v[i], determine a way t ...

  9. FZU - 2038 -E - Another Postman Problem (思维+递归+回溯)

    Chinese Postman Problem is a very famous hard problem in graph theory. The problem is to find a shor ...

随机推荐

  1. dubbo.xsd

    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namesp ...

  2. 二、JavaScript语言--JS基础--JavaScript入门篇

    1.如何插入JS 使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要成对出现,并把JavaScript代码写在<scri ...

  3. Linux 查看 网卡类型

    http://blog.csdn.net/ydyang1126/article/details/51140131 http://blog.sina.com.cn/s/blog_5425edf40101 ...

  4. 在.NET下使用C# 控制Windows系统音量

    C#开发Windows应用程序中经常需要去控制系统的音量,分两种方式: 1.使用Win Api控制 2.使用C++ dll控制 Win Api控制: 使用user32.dll和winmm.dll都可以 ...

  5. WebRTC源码分析四:视频模块结构

    转自:http://blog.csdn.net/neustar1/article/details/19492113 本文在上篇的基础上介绍WebRTC视频部分的模块结构,以进一步了解其实现框架,只有了 ...

  6. java中基本输入输出流的解释(flush方法的使用)

    转自:http://fsz521job.itpub.net/post/5606/34827 网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器 ...

  7. ML 03、机器学习的三要素

    机器学习算法原理.实现与实践——机器学习的三要素 1 模型 在监督学习中,模型就是所要学习的条件概率分布或决策函数.模型的假设空间包含所有可能的条件概率分布或决策函数.例如,假设决策函数是输入变量的线 ...

  8. 利用SQL语句查询数据库中所有表

    Oracle: SELECT * FROM ALL_TABLES;系统里有权限的表 SELECT * FROM DBA_TABLES; 系统表 SELECT * FROM USER_TABLES; 当 ...

  9. hdu 5762 Teacher Bo 曼哈顿路径

    Teacher Bo Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

  10. POJ1511 Invitation Cards(多源单汇最短路)

    边取反,从汇点跑单源最短路即可. #include<cstdio> #include<cstring> #include<queue> #include<al ...