FZU 2195 思维
很无聊的背景故事...求最短的时间原来就是省去了检查员最后上山的时间...还让不让人回家了...
感觉这是个最短路
思想是求出来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 思维的更多相关文章
- FZU 2195 检查站点
求出根节点到每个叶子节点的距离,找到最大的.然后总权值减去最大叶子距离就是答案. GNU C++ AC Visual C++ TLE #include<stdio.h> #include ...
- FZU Problem 2214 Knapsack problem(背包+思维转换)
转化思维,把价值当成背包容量,选择最小的花费,从上到下枚举,找到当这个最小的花费. #include<iostream> #include<cstring> #include& ...
- L - Tic-Tac-Toe FZU - 2283 (思维)
题目链接: L - Tic-Tac-Toe FZU - 2283 题目大意:两个人下棋,一共是三步棋,第一个人下一步,第二个人下一步,第三个人下一步,然后问你在两个人在都足够聪明的条件下,第一个人能否 ...
- fzu 2250 不可能弹幕结界 分析+模拟,考察思维严谨。
Problem 2250 不可能弹幕结界 Accept: 5 Submit: 13Time Limit: 1000 mSec Memory Limit : 65536 KB Problem ...
- FZU 2202——犯罪嫌疑人——————【思维题】
犯罪嫌疑人 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- fzu月赛(2015.11)(思维)
Problem 2205 据说题目很水 Sunday最近对图论特别感兴趣,什么欧拉回路什么哈密顿回路,又是环又是树.在看完一本书后,他对自己特别有信心,便找到大牛牛犇犇,希望他出一题来考考自己. 在遥 ...
- FZU 2297 Number theory【线段树/单点更新/思维】
Given a integers x = 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First l ...
- 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 ...
- 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 ...
随机推荐
- intellij 提交代码到git
.配置git .create git repository .git-->add commit Directory .提交代码 git remote add origin https://git ...
- (六)STM32的时钟系统
在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL (1) HSI是高速内部时钟,RC振荡器,频率为8MHz: (2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外 ...
- Xamarin.Android开发实践(十一)
Xamarin.Android之使用百度地图起始篇 一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是 Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库 ...
- java acm输入输出
转自:http://wei.jian.fei.blog.163.com/blog/static/97300140201081425159217/ 下面说一下ACM-ICPC队员初用Java编程所遇到的 ...
- 解决:Google代码achartengine曲线代码报错问题(转)
原文地址链接 官网:http://code.google.com/p/achartengine/ 下载代码部署项目会报下面的错误: java.lang.NoClassDefFoundError: or ...
- Hark的数据结构与算法练习之鸽巢排序
算法说明 鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的. 逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1 ...
- poj 2524 并查集 Ubiquitous Religions
//#include<bits/stdc++.h> #include<iostream> #include<stdio.h> #define max1 50005 ...
- sql 遍历结果print和表格形式
select * from tb_province --省 pID pName1 北京市2 天津市3 上海市4 重庆市5 河北省6 山西省....... select * from tb_city - ...
- Tr A(矩阵快速幂)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- Log4net源码View之Logger解析
1.简介 Logger是Log4net的三大核心载体之一,搞清楚它的意义很重大.另外两个分别是Appender和Layout.其对应关系为一个Logger对应多个Appender,一个Appender ...