3-1知识点续:
cpp
//给string设置大小:
/*
1.s.resize(N):
resize()函数可以改变string的大小,并根据需要添加或删除字符。如果新的大小比当前大小大,将会在末尾添加字符;如果新的大小比当前大小小,将会删除末尾的字符。
*/
//例子:
void solve() {
string s = "abcdef";
s.resize(5);
cout << s << endl;//输出abcde
}
/*
2.s.reserve(N):
但使用reserve()函数只是预留了存储空间,并不会改变实际的字符数量。
*/
//例子:
void solve() {
string s = "abcdef";
s.reserve(5);
cout << s << endl;//输出abcdef
}
cpp
//将string转化为long long型
void solve() {
string s = "123";
int a = strtoll(s.c_str(), NULL, 10);
cout << a / 10;
}
复习3-2:习题篇:
cpp
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+6;
const int inf=0x3f3f3f3f;
typedef pair<int,int> pii;
vector<pii>ve[N];
int dis[N];
void dfs(int x,int fa)
{
for(auto [u,w]:ve[x])
{
if(u==fa)continue;
dis[u]=dis[x]+w;
dfs(u,x);
}
}
void solve()
{
int n,cn=0;
cin>>n;
for(int i=1;i<n;i++)
{
int u,v,w;
cin>>u>>v>>w;
ve[u].push_back({v,w});
ve[v].push_back({u,w});
cn+=2*w;
}
dfs(1,0);
int max1=-inf,flag;
for(int i=1;i<=n;i++)
{
if(max1<dis[i])
{
max1=dis[i];
flag=i;
}
}
memset(dis,0,sizeof dis);
dfs(flag,0);
max1=-inf;
for(int i=1;i<=n;i++)
{
max1=max(max1,dis[i]);
}
cout<<cn-max1;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t;
//cin>>t;
t=1;
while(t--)
{
solve();
}
return 0;
}
cpp
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+6;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
vector<int>ve[N];
int dp[N][2];
void dfs(int x,int fa)
{
dp[x][0]=1,dp[x][1]=1;
for(auto i:ve[x])
{
if(i==fa)continue;
dfs(i,x);
dp[x][0]=dp[x][0]*dp[i][1]%mod;
dp[x][1]=dp[x][1]*(dp[i][0]+dp[i][1])%mod;
}
}
void solve()
{
int n;
cin>>n;
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
ve[u].push_back(v);
ve[v].push_back(u);
}
dfs(1,0);
cout<<(dp[1][0]+dp[1][1])%mod;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t;
//cin>>t;
t=1;
while(t--)
{
solve();
}
return 0;
}
待续,,,