目錄
[noip2018]簡要題解(部分)
pj:t1 標題統計
t2 龍虎鬥
t3 擺渡車
t4 對稱二叉樹 tg
day1
t1 鋪設道路
t2 貨幣系統
t3 賽道修建
day2
t1 旅行
t2 填數遊戲
t3 保衛王國
入門難度
#includeusing namespace std;
int main()
printf("%d\n",ans);
}
掃了判斷完事
#includeusing namespace std;
const int n=1e5+5;
typedef long long ll;
int n;
ll s[n],ans1,ans2;
int main()
ll ans=-1;int p=0;
for(int i=1;i<=n;i++)else p=i,ans=abs(r-l);
}cout《普及這麼難了嗎。
這dp還是不太好想啊。首先我們考慮t太大了不能設為狀態,然後就考慮前兩個資料。
然後我們發現2*m的等待時間是不可能達到的。然後就dpij表示第i個人等了j的時間的最小總等待時間。
轉移見**。
#includeusing namespace std;
const int n=510,m=110;
int n,m;
int f[n][m*2];int t[n];
const int inf=0x3f3f3f3f;
int main()}}
}int ans=inf;
for(int i=0;i<2*m;i++)
cout《當左右兒子sz相等時暴力chk就行了,當然你寫hash或者其他奇奇怪怪的我也攔不了你。
#includeusing namespace std;
const int n=1e6+5;
int val[n],ch[n][2];
int sz[n];
int n,ans=1;
bool dfs2(int lt,int rt)
return lt==-1&&rt==-1;
}void dfs(int x)
if(~ch[x][1])
if(~l&&~r&&l==r&&sz[x]>ans)
}int main()
printf("%d\n",ans);
}
一定是選乙個子集更優。然後就想到去排序然後做揹包就行了。
#includeusing namespace std;
bool vis[250010];
int t,n,a[110];
int main()
}printf("%d\n",ans);
}}
二分答案肯定是對的,考慮去找一下性質。發現dp的時候如果是一條鏈它越在底端答案一定更優。然後考慮合併的時候發現還需要盡量讓剩下的最大長度變得更大。在這個地方按照長度排序然後每個長度找最小的可行的配對。
#includeusing namespace std;
const int n=5e4+5,m=1e5+5;
int n,m,cnt,hed[n],to[m],nxt[m],val[m];
void adde(int u,int v,int w)
int mxp[n],f[n];
int stk[n],top,stk2[n],top2;
bool vis[n];
inline void dfs(int x,int pre,int len)
top=0;
int dpsum=0;
for(int i=hed[x];i;i=nxt[i])
if(top)
int main()
printf("%d",l);
}
判環dfs可以n方,然而被卡常。
懶得掛**了。咕咕咕
不會。咕咕咕
動態dp來著。。
存個2*2矩陣(0/1,0/1)表示當前的下面取0/1,上面取0/1的貢獻,然後就可以倍增了。相見**
#includeusing namespace std;
const int n=1e5+5,m=2e5+5;
int n,m;char s[5];
int hed[n],to[m],nxt[m],cnt;
typedef long long ll;
const ll inf=1ll<<60;
void adde(int u,int v)
int fa[n][20],dep[n];
ll p[n];
ll f[n][2],g[n][2];//g表示去掉當前子樹。
ll dp[n][20][2][2];
void dfs(int x,int fa,int d)
}void dfs_2(int x)
}template inline void read(t& a)
while(x>='0'&&x<='9')
a*=flag;return;
}inline void init()
for(int i=1;(1<>st;
ll solve(int x,int a,int y,int b)
tx[0]=nx[0],tx[1]=nx[1],x=fa[x][i];}}
if(x==y)
return tx[b]+g[x][b];
for(int i=19;~i;i--)
}tx[0]=nx[0],tx[1]=nx[1],x=fa[x][i];
ty[0]=ny[0],ty[1]=ny[1],y=fa[y][i];}}
int lca=fa[x][0];
ll ans0=f[lca][0]-f[x][1]-f[y][1]+tx[1]+ty[1]+g[lca][0];
ll ans1=f[lca][1]-min(f[x][0],f[x][1])-min(f[y][0],f[y][1])+min(tx[0],tx[1])+min(ty[0],ty[1])+g[lca][1];
return min(ans0,ans1);
}int main()
dfs(1,0,1);dfs_2(1);
init();
while(m--)
return 0;
}
NOIp 2018 旅行 題解
題目傳送門 題目大意 現在有一棵樹或一張只有乙個環的圖 連通 要求遍歷一遍這個圖,遍歷的順序即為乙個長度為 n nn 的序列,要求字典序最小的序列。假如是一棵樹的話,顯然貪心即可,從 1 11 出發,每次往編號小的走就好了。假如只是多一條邊的話,列舉刪掉那一條邊,然後變成一棵樹來做。因為每次都要往編...
競賽題解 NOIP2018 旅行
坑還得一層一層的填 填到day2t1了洛谷 p5022 以下copy自洛谷,有刪減 修改 小 y 是乙個愛好旅行的 oier。她來到 x 國,打算將各個城市都玩一遍。小y了解到,x國的 n 個城市之間有 m 條雙向道路。每條雙向道路連線兩個城市。不存在兩條連線同一對城市的道路,也不存在一條連線乙個城...
競賽題解 NOIP2018 賽道修建
額 考試的時候大概猜到正解,但是時間不夠了,不敢寫,就寫了騙分qwq 現在把坑填好了 copy from 洛谷 c 城將要舉辦一系列的賽車比賽。在比賽前,需要在城內修建 m 條賽道。c 城一共有 n 個路口,這些路口編號為 1,2,n 有 n 1 條適合於修建賽道的雙向通行的道路,每條道路連線著兩個...