題目傳送門
joi 公司的某個實驗室中有著複雜的電路。電路由 \(n\) 個節點和 \(m\) 根細長的電阻組成。節點編號為 \(1\sim n\)。
每個節點可設定為兩種電平之一:高電平或者低電平。每個電阻連線兩個節點,只有一端是高電平,另一端是低電平的電阻才會有電流流過。兩端都是高電平或者低電平的電阻不會有電流流過。
試求:有多少個電阻,可以通過調節各節點的電壓,使得「沒有電流流經該電阻,且其他 \(m-1\) 根電阻中都有電流流過」。
\(n\le 10^5,m\le 2\times 10^5\)
不難看出,一條邊滿足條件的情況當且僅當奇環都包含這條邊且偶環都不包含這條邊。然後這個可以直接 dfs 樹上差分。
時間複雜度 \(\theta(n+m)\)。
#include using namespace std;
#define int register int
#define maxn 100005
template inline void read (t &t)while (c >= '0' && c <= '9') t *= f;}
template void read (t &x,args& ... args)
template inline void write (t x)if (x > 9) write (x / 10);putchar (x % 10 + '0');}
int n,m;
struct edgee[maxn << 2];
int toop = 1,head[maxn];
void add_edge (int u,int v),head[u] = toop;
e[++ toop] = edge ,head[v] = toop;
}bool rt[maxn],vis[maxn];
int ocnt,dep[maxn],ores[maxn],eres[maxn];
void dfs (int u,int fa) }}
signed main()
題目傳送門
可以二分答案,然後把每乙個防禦塔拆開跑二分圖匹配。
時間複雜度玄學。
#include using namespace std;
#define int register int
#define maxn 55
template inline void read (t &t)while (c >= '0' && c <= '9') t *= f;}
template void read (t &x,args& ... args)
template inline void write (t x)if (x > 9) write (x / 10);putchar (x % 10 + '0');}
double t1,t2;
vector g[maxn * maxn];
int n,m,tot,v,my[maxn * maxn];
struct nodever[maxn * maxn];
void prepare ();
}int sqr (int x)
struct point
friend double dist (point a,point b)
}dat[maxn],ene[maxn];
bool vis[maxn * maxn];
bool dfs (int u)
} return 0;
}bool check (double s)
signed main()
printf ("%.6f\n",ans);
return 0;
}
2020 08 12 題目題解
題目傳送門 給出乙個 n 個點的樹,問有多少個三元組 x,y,z 滿足 x,y,z 兩兩之間距離相同。n le 10 5 不難想到乙個 dp 做法,我們可以設 f 表示以 u 為根的子樹內距離 u 距離為 i 的點的個數,g 表示以 u 為根的子樹內,二元組 x,y 滿足 text x,text x...
開發日記 2020 12 1 複雜排序
最近在乙個專案裡有個任務。任務裡涉及到兩張表 賬號表 user 使用者審核記錄表 usercheck 任務要求 父賬號的排序 要按照父賬號下屬的子賬號的最新審核記錄為 等待審核 如果都是 等待審核 就再按審核時間排序。任務裡涉及到兩張表 賬號表 user 使用者審核記錄表 usercheck 下面是...
leetcode題目例題解析(七)
題目描述 given a linked list,swap every two adjacent nodes and return its head.for example,given 1 2 3 4,you should return the list as 2 1 4 3.your algori...