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

感觉这是个最短路

思想是求出来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. CUDA学习笔记(四)——CUDA性能

    转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm5h.html 四.CUDA性能 CUDA中的block被划分成一个个的warp,在GeForce880 ...

  2. MVC登录案例

    1.在Controllers文件夹里面新建一个控制器HomeController;2.在默认的Index方法里面添加一个视图,名字跟Controller中的方法名一样叫Index,添加后的视图文件会在 ...

  3. Controller与View之间的数据传递

    1)Controller向View传递数据ViewData["message"] = "Hello";//使用ViewData传递数据ViewBag.Time ...

  4. Linux底下的第一个C程序

    首先保证你的Linux底下安装了GCC,假如没有安装GCC的话请参考: http://www.cnblogs.com/aspirant/p/3544398.html 假如输入 gcc -v 不再是co ...

  5. 基数排序(radix sort)

    #include<iostream> #include<ctime> #include <stdio.h> #include<cstring> #inc ...

  6. 配置redis外网可访问

    redis采用的安全策略,默认会只准许本地访问 通过简单配置,完成允许外网访问 [root@cache01 conf]# egrep "(^bind|#bind|# bind)" ...

  7. 发现磁盘的shell

    #!/bin/bash #set -x diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z ...

  8. Web性能测试中的几个关键指标

    系统吞吐量 吞吐量指单位时间内系统处理的请求数量,体现系统的整体处理能力.对于网站,可以用"请求数/秒"或是"页面数/秒"来衡量,也可以用"访问人数/ ...

  9. SL4A

    参考文章:http://my.oschina.net/u/1468102/blog/208687 如何安装使用SL4A http://www.ibm.com/developerworks/cn/mob ...

  10. 使用jQuery简单实现产品展示的图片左右滚动功能

    今天要做一个产品展示功能,由于产品比较多,一屏展示不完,所以想要做一个通过点击进行翻页的效果,在网上找了几个都不大好用,最后只能自己动手写了. 效果如下所示: 原理比较简单:将要滚动显示的区域的CSS ...