poj 3321 Apple Trie

/*poj 3321 Apple Trie 這道題的關鍵是如何將一個樹建成一個一維數組利用樹狀數組來解題!可以利用dfs()來搞定,我們在對一個節點深搜后,所經過的節點的數目就是該節點的子樹的數目所以我們利用start[i]數組來記錄 i 節點在一維數組的起始位置, 而end[i]則是記錄i節點所有孩子 節點最后一個孩子節點在數組的位置,那么end[i]-start[i]+1,就是 i 節點(包括自身)和其所有孩子節點的數目。數組建好了,那么最后就是套用樹狀數組模板進行求解了! 
*/
#include<iostream> 
#include<vector>
#include<cstring>
#include<cstdio>
#define N 100005
using namespace std;
class node
{
public :int k;node *next;node(){next=NULL;}
};node trie[N];
//trie[i]記錄的是所有是 i 節點 孩子節點組成的鏈表的頭部 
int C[N], num[N];
int start[N], end[N];
int cnt, n;void dfs(int cur)
{start[cur]=cnt;if(trie[cur].next==NULL){end[cur]=cnt;return;}for(node *p=trie[cur].next; p!=NULL; p=p->next)//遍歷cur節點的所有孩子節點 {++cnt;dfs(p->k);}end[cur]=cnt;//深搜之后得到的cnt值就是cur節點最后一個孩子在一維數組中的位置 
}int lowbit(int x)
{return x&(-x);
}void init(int p, int k)
{int i;num[p]=k;for(i=p-lowbit(p)+1; i<=p; ++i)C[p]+=num[i];
}int getSum(int p)
{int s=0;	while(p>0){s+=C[p];p-=lowbit(p);}return s;
}void update(int p, int k)
{while(p<=n){C[p]+=k;p+=lowbit(p);}
}int main()
{int i, u, v, m;char ch[2];int f;while(scanf("%d", &n)!=EOF){cnt=1;memset(C, 0, sizeof(C));for(i=1; i<n; ++i){scanf("%d%d", &u, &v);node *p=new node();p->k=v;p->next=trie[u].next;trie[u].next=p;}dfs(1);for(i=1; i<=n; ++i)init(i, 1);scanf("%d", &m);while(m--){scanf("%s%d", ch, &f);if(ch[0]=='C'){if(num[f]==1){update(start[f], -1);num[f]=0;}else{update(start[f], 1);num[f]=1;} }elseprintf("%d\n", getSum(end[f])-getSum(start[f]-1));}}return 0;
}

/*
這道題利用二維數組建圖也可以過,不過數組的大小還真是難以捉摸....
*/
#include<iostream> #include<vector> #include<cstring> #include<cstdio> #define N 100005 using namespace std; int node[N][100]; int C[N], num[N]; int start[N], end[N]; int cnt, n;void dfs(int cur) {int sz=node[cur][0];start[cur]=cnt;if(sz==0){end[cur]=cnt;return;}for(int i=1; i<=sz; ++i){++cnt;dfs(node[cur][i]);}end[cur]=cnt; }int lowbit(int x) {return x&(-x); }void init(int p, int k) {int i;num[p]=k;for(i=p-lowbit(p)+1; i<=p; ++i)C[p]+=num[i]; }int getSum(int p) {int s=0; while(p>0){s+=C[p];p-=lowbit(p);}return s; }void update(int p, int k) {while(p<=n){C[p]+=k;p+=lowbit(p);} }int main() {int i, u, v, m;char ch[2];int f;while(scanf("%d", &n)!=EOF){cnt=1;for(i=1; i<=n; ++i)node[i][0]=0;memset(C, 0, sizeof(C));for(i=1; i<n; ++i){scanf("%d%d", &u, &v);node[u][++node[u][0]]=v;}dfs(1);for(i=1; i<=n; ++i)init(i, 1);scanf("%d", &m);while(m--){scanf("%s%d", ch, &f);if(ch[0]=='C'){if(num[f]==1){update(start[f], -1);num[f]=0;}else{update(start[f], 1);num[f]=1;} }elseprintf("%d\n", getSum(end[f])-getSum(start[f]-1));}}return 0; }

  

  

轉載于:https://www.cnblogs.com/hujunzheng/p/3812810.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531954.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531954.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531954.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php美團項目分享,美團項目(純代碼)(示例代碼)

一.框架搭建1.icon規格要求可從文檔中查找,搜索app icon.2.因為很多界面重復利用,所以不用storyboarda.刪除stroyboard,在設置中Info -> Main storyboard file base name 項直接去除b.創建ZXHomeViewController(UICollectionViewController)和ZXNavigationController(UINavi…

ioc spring 上機案例_Spring的IoC入門案例

1、創建工程&#xff0c;導入坐標1.1 創建工程1.2 導入坐標xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0org.examplespring_01_io…

java中父類與子類, 不同的兩個類中的因為構造函數由于遞歸調用導致棧溢出問題...

1 /*2 對于類中對成員變量的初始化和代碼塊中的代碼全部都挪到了構造函數中&#xff0c;3 并且是按照java源文件的初始化順序依次對成員變量進行初始化的&#xff0c;而原構造函數中的代碼則移到了構造函數的最后執行4 */5 import static java.lang.System.out;6 7 public clas…

liunx php的項目地址,在 Linux 配置 PHP 項目

在 Linux 配置 PHP 項目一, 搭建測試環境軟件環境:(PHP 項目)PHP5.4Apache(httpd2.4)mysql5.7二, 安裝1掛載:1. 把 iso 的鏡像文件放到虛擬機 Linux 的 CD/ROM(在右下角 (網絡適配器 / 橋接模式) 旁有個光盤, 點擊連接, 之后頁面出現一個光盤)2. 使用掛載命令, 把 CD/ROM 設備里…

springwebflux 頁面_【SpringBoot WEB系列】WebFlux靜態資源配置與訪問

上一篇博文介紹SpringMVC的靜態資源訪問&#xff0c;那么在WebFlux中&#xff0c;靜態資源的訪問姿勢是否一致呢I. 默認配置與SpringBoot的默認配置一樣&#xff0c;WebFlux同樣是classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/…

java中TreeSet集合如何實現元素的判重

1 /*2 看一下部分的TreeSet源碼....3 public class TreeSet<E> extends AbstractSet<E>4 implements NavigableSet<E>, Cloneable, java.io.Serializable5 {6 private transient NavigableMap<E,Object> m;7 //NavigableMap繼承SortedMap&…

php中改變函數路由,通過PHP重啟路由器以更換IP(原創)

在采集大批量數據時常常會觸發對方服務器的“自我保護”&#xff0c;請求過于頻繁就限制訪問。這時需要停留很長一段時間(十幾分鐘到幾十分鐘不等)才能恢復訪問&#xff0c;這樣采集數據的速度就受到非常大的限制。解決方法有兩個&#xff1a;1 通過圖片識別繞過驗證碼機制&…

axure 畫小程序效果圖_APP詳情頁如何用Axure畫出來

詳情頁是App原型中比較復雜的頁面類型&#xff0c;熟悉它的常用套路有助于快速畫出。之前的文章已經講解了APP常見功能中的頁面模板、下導航、上導航、列表頁怎么畫出來&#xff0c;請繼續關注浪子教你畫APP原型后續的其他功能模塊。APP詳情頁往往包含上導航&#xff0c;內容區…

HashSet中實現不插入重復的元素

/* 看一下部分的HashSet源碼.... public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable {static final long serialVersionUID -5024744406713321676L;private transient HashMap<E,Object> map;privat…

tuxedo錯誤碼6_TUXEDE返回的所有錯誤代碼

TUXEDE返回的所有錯誤代碼tuxedo/include/atmi.h定于了TUXEDE返回的所有錯誤代碼。/** tperrno values - error codes* The man pages explain the context in which the following error codes* can return.*/#define TPMINVAL 0 /* minimum error message */#define TPEABORT…

java中finally和return的執行順序

注意&#xff1a;return的位置。。。從這幾個例子中可以看到&#xff0c;如果try之前沒有有條件的return&#xff0c;則try..catch..finally語句塊中的語句都是順序執行&#xff08;如果try中或者catch中 有return語句&#xff0c;那么先執行該return&#xff0c;然后執行final…

oracle如何設置權限,ORACLE的權限設置

創建用戶create user abc identified by 123;----------------------------------------------------授權grant create session,create table to abcgrant create sysdba to database----------------------------------------------------然后conn abc密碼&#xff1a;123----…

有關try..catch..finally處理異常的總結

//看一下下面的程序&#xff0c;你能正確的寫出不同的testEx2()方法時&#xff0c;程序的最終打印出來的數據嗎....先不要看下面的答案 public class ExceptionTest { public ExceptionTest() { } boolean testEx() throws Exception { boolean ret true; try { ret te…

oracle key的含義,v$session SERIAL#字段的含義

liyx&#xff1a;#!/bin/bash||#Write by liyx||||#數據庫服務器地址||DBHOSTlocalhost||#數據庫登錄名||USERNAMEroot||#數據庫密碼||PASSWORDroot||#需要備份的數據庫 或 輸入類似 db1 db2 的列表清單 例 DBNAMES"all"||DBNAMES"ess_simple"||#備份MYSQL…

java.util.Scanner簡單應用

import java.util.Scanner; import java.io.*; public class FileScannerTest{public static void main(String args[]){ //**************Scanner 的一般用//1.public Scanner(InputStream source),利用InputStream 對象進行構造Scanner myScanner1 new Scanner(System.in);w…

oracle能查dml記錄么,如何查詢DML操作的詳細記錄

可以通過flashback_transaction_qurey視圖查詢eg:SQL> desc flashback_transaction_queryName Null? Type----------------------------------------- -------- ----------------------------XID …

krpano 場景切換 通知_一個基于Vulkan的異步場景加載設計

異步場景加載基本流程驗證完成。此方法理論上只需要使用3個Vulkan的指令隊列。對于移動平臺上的Vulkan&#xff0c;指令隊列數量極少&#xff0c;比如Adreno640只有3個指令隊列可用。所以理論上這一設計也適合目前的移動平臺使用。(1) graphic_queue&#xff1a;用于完成當前場…

oracle 數據庫回閃,各種數據庫閃回的總結

本帖最后由 guoyJoe 于 2013-3-26 21:15 編輯一、Fashback Query閃回查詢:Books-->APP-->Application Developers Guide - Fundamentals-->Flashback&#xff11;、應用Flashback Query查詢過去的數據select * from t1 as of scn 44545454;select * from t1 as of tim…

poj 2528 Mayor's posters(線段樹+離散化)

1 /*2 poj 2528 Mayors posters 3 線段樹 離散化4 5 離散化的理解&#xff1a;6 給你一系列的正整數&#xff0c; 例如 1&#xff0c; 4 &#xff0c; 100&#xff0c; 1000000000&#xff0c; 如果利用線段樹求解的話&#xff0c;很明顯7 會導致內存的耗盡。所以我們做一…

漢儀尚巍手書有版權嗎_為什么“漢儀尚巍手書”會大行天下?

昨夜&#xff0c;我寫了篇文章《莫選最丑尚巍體&#xff0c;要選美麗中國字&#xff01;》發到朋友圈、微信群里&#xff0c;得到了一些朋友的反饋&#xff0c;有位朋友居然還認識尚巍&#xff0c;把他的微信推給了我。我加了尚巍的微信&#xff0c;待他通過后&#xff0c;便連…